简介 Unicode是编码字符集,而UTF-8就是字符编码,即Unicode规则字库的一种实现形式。随着互联网的发展,对同一字库集的要求越来越迫切,Unicode标准也就自然而然的出现。 而UTF-8则只实现了第一个Plane,可见UTF-8虽然是一个当今接受度最广的字符集编码,但是它并没有涵盖整个Unicode的字库,这也造成了它在某些场景下对于特殊字符的处理困难 ASCII--->GB2312 ,可以给整个主机做快照 升级 utf8mb4是MySQL5.5.3版本之后支持的字符集,所以,如果你需要使用这个字符集,前提条件是你的MySQL版本必须 >= 5.5.3 修改 在MySQL中,可以为一个 utf8mb4,但是实际只是修改了database新创建的表,默认使用utf8mb4,原来已经存在的表,字符集并没有跟着改变,需要手动为每张表设置字符集 修改table的字符集 只修改表默认的字符集 ALTER TABLE table_name DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; 修改表默认的字符集和所有字符列的字符集 ALTER
需要修改:库、表、字段 修改数据库字符集: ALTER DATABASE db_name DEFAULT CHARACTER SET character_name [COLLATE ...] ;如:ALTER DATABASE test DEFAULT CHARACTER SET utf8mb4; 把表默认的字符集和所有字符列改为新的字符集: ALTER TABLE tbl_name CONVERT COLLATE utf8_general_ci; 只是修改表的默认字符集: ALTER TABLE tbl_name DEFAULT CHARACTER SET character_name [COLLATE ;如:ALTER TABLE logtest DEFAULT CHARACTER SET utf8mb4 COLLATE utf8_general_ci; 修改字段的字符集: ALTER TABLE =utf8mb4; set global character_set_connection=utf8mb4; 修改配置文件: 修改mysql的my.cnf文件中的字符集 如:default-character-set
上篇文章介绍了mysql字符集查询sql从字符串到字节串编码解码的转换,及其如何返回给客户端: Mysql字符集(3)--mysql从入门到精通(四) 了解字符集我们可以解决的问题? 当用sql查询出来的结果乱码,可能因为字符集转换导致的。 当我们排序时候未获取想要的结果,可能因为字符集比较规则导致的。 总结: 字符集:指某个字符范围的编码规则。 比较规则:针对某个字符集中字符大小比较的一种规则。 Mysql中:一个字符集有若干个比较规则,其中有个默认的比较规则,一个字符集必须对应一个比较规则。 查询方法,show variables like ‘character_set_resluts’; Mysql主要有四个字符集级别,服务器级别,数据库级别,表级别,列级别,若低级别的没有设置字符集,则会自动继承高级别的字符集 ,比如列如果没有设置自己特定的字符集,则会默认继承表级别的字符集。
UTF-32UTF-32 (或 UCS-4):对每一个 Unicode 码点使用 4 字节进行编码,其它的 Unicode 编码方式则使用不定长度编码。就空间而言,UTF-32 是非常没有效率的。 UTF-32与UCS-4: 在Unicode与ISO 10646合并之前,ISO 10646标准为“通用字符集”(UCS)定义了一种31位的编码形式(即UCS-4),其编码固定占用4个字节,编码空间为0x00000000 UCS-4有20多亿个编码空间,但实际使用范围并不超过0x10FFFF,并且为了兼容Unicode标准,ISO也承诺将不会为超出0x10FFFF的UCS-4编码赋值。 由此UTF-32编码被提出来了,它的编码值与UCS-4相同,只不过其编码空间被限定在了0~0x10FFFF之间。因此也可以说:UTF-32是UCS-4的一个子集。 UTF-16与UCS-2: 除了UCS-4,ISO 10646标准为“通用字符集”(UCS)定义了一种16位的编码形式(即UCS-2),其编码固定占用2个字节,它包含65536个编码空间(可以为全世界最常用的
在英文平台下,默认的字符集编码是Cp1252(类似于ISO-8859-1),如果使用GBK、UTF-8进行编码,得到的字节数组依然是正确的(GBK4个字节,UTF-8是6个字节)。 对于GBK,JVM依然会转换成4个字节,对于UTF-8,JVM依然会转换成6个字节。 string = ffffffce byte[3] = -60 hex string = ffffffc4 如果新的encoding是GBK,那么经过解码后,由于一个字符用2个字节表示。 于是结果就像上面的例子一样,同样是4个原始字节,有些每2个一组进行解析,有些每个一组进行解析,有些每3个一组进行解析。其结果就只能看那种编码方式合适了。 这些字节数组有可能是正确的(只要该字符集支持中文),也可能是完全错误的(该字符集不支持中文)。
MySQL 服务器默认字符集和排序规则分别是 utf8mb4 和 utf8mb4_0900_ai_ci,但是您可以在服务器、数据库、表、列和字符串字面量级别指定字符集。 MySQL 8.0 开始,默认字符集改为 utf8mb4,而不是之前的 latin1;Maxlen 表示该字符集中单个字符最多可能占用的字节数,utf8mb4 中的一个字符最多占用 4 个字节,用于存储表情符号 CHARACTER SET 或者排序规则 COLLATE,MySQL 默认使用 character_set_server 服务器字符集(utf8mb4)和排序规则(utf8mb4_0900_ai_ci 例如,以下字符串常量使用相同的字符集: SELECT '数据库'; SELECT _utf8mb4'数据库'; SELECT _utf8mb4'数据库' COLLATE utf8mb4_0900_ai_ci (4)某些 MySQL 驱动程序允许在连接字符串中指定一个字符集编码,例如 JDBC 中的 characterEncoding。
MySQL之字符集 字符集介绍 gbk/gb2312 gbk/gb2312 采用双字节字符集,不论中、英文字符均使用双字符来表示,为了区分中文,将其最高位都设定成1 gb2312是gbk的子集,gbk 是gb18030的子集,gb2312仅能存储简体中文字符 gbk包括中日韩字符的大字符集 通常使用gbk字符集足够 国际通用性比utf8差,不过utf8占用的数据库比gbk大(utf8是三字节字符集) utf8/utf8mb4 UTF全称(Unicode Transformation Format),是Unicode的一种存储方式,可变长度字符编码,又称万国码 数据库字符集尽量使用utf8( utf8mb4一个字符最多能存4字节,所以能支持更多的字符集;项目中常用utf8mb4存放emoji表情 latin1 是8bit (1 bytes)字符集,但不能覆盖亚洲、非洲语言 unidoce是 ,最好是utf8 3、字符无需区分大小写时,采用默认的xx_ci校验集可以,否则选择xx_bin校验集(生产环境中,尽量不要修改校验集) 4、默认字符集是latin1,该字符集存放汉字是分开存放,以至于检索结果时不够精确
可以通过以下方法打印所有的字符集 public void test(){ Map<String , Charset> map = Charset.availableCharsets System.out.println(entry.getKey() + "=" + entry.getValue()); } } } 得到所支持的所有字符集如下 ISO-8859-14=ISO-8859-14 ISO-8859-15=ISO-8859-15 ISO-8859-2=ISO-8859-2 ISO-8859-3=ISO-8859-3 ISO-8859-4= ISO-8859-4 ISO-8859-5=ISO-8859-5 ISO-8859-6=ISO-8859-6 ISO-8859-7=ISO-8859-7 ISO-8859-8=ISO-8859-8 ISO
MySQL 字符编码集中有两套 UTF-8 编码实现:utf8 和 utf8mb4。 如果使用 utf8 的话,存储 emoji 符号和一些比较复杂的汉字、繁体字就会出错。 什么是字符集 ? 字符集是多个字符的集合,字符集种类较多,每个字符集包含的字符个数不同,常见字符集名称:ASCII字符集、GB2312字符集、BIG5字符集、 GB18030字符集、Unicode字符集等。 mydatabase CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; 创建表时设置字符集:在创建表时,可以使用CHARACTER SET关键字指定表的字符集 ,如: CREATE TABLE mytable (id INT, name VARCHAR(255)) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE mytable CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4
数据库已设置字符集为utf8mb4, 但是由于node使用的mysql依赖 connector版本可能太低,有字符集issue, package.json 1"mysql": "2.18.1" 解决办法 ConnectionConfig.getCharsetNumber(options.charset) 4 5: options.charsetNumber || Charsets.UTF8_GENERAL_CI ConnectionConfig.getCharsetNumber(options.charset) 14 15: options.charsetNumber || Charsets.UTF8MB4_UNICODE_CI
首先是查看字符集格式 show variables where variable_name like '%character%' 然后是存储过程,用于修改表内所有字段的字符集 DROP PROCEDURE
在mysql中查看字符集: show variables like ‘%char%’; 如果database和server都不是utf8,则需要配置mysql的配置文件。
| +----+-------+------+------+------+------+ 4 rows in set (0.00 sec) 8、本地环境变量影响客户端字符集设定 – 在my.cnf中未配置客户端字符集,如果配置后,则使用配置文件中设定的字符集 [root@centos7 ~]# export LANG=en_US.UTF-8 [root@centos7 b、如果两个字符集之间无法进行无损编码转换,一定会出现乱码。 解决方案: 1、一定要保证character_set_connection字符集大于等于client字符集,否则会丢失数据 比如: latin1 < gb2312 < gbk < utf8, 若设置 大于等于数据存入的字符集,否则会丢失数据 比如:如存储的字符为utf8,而返回character_set_results为gbk,数据被截断 3、所有变量使用统一的字符编码,如utf8或者utf8mb4
vs配置选项“使用多字节字符集”和“使用Unicode字符集”的区别 VS集成开发环境,字符集选择“使用多字节字符集”和“使用Unicode字符集”的直接区别就是:编译器是否增加了宏定义——UNICODE 而是否增加了宏定义(UNICODE)则决定了Windows API函数参数有字符串时使用的多字节字符集还是宽字符字符集。 下面介绍多字节字符集还是宽字符(UNICODE)字符集的区别。 多字节字符集和宽字符(UNICODE)字符集的区别 要理解字节字符集还是宽字符(UNICODE)字符集的区别,首先先理解char与wchar_t的区别 1. char与wchar_t的区别 char叫多字节字符 3] = L"中国"; wcout << L"字符串4 : " << wszChar4 << L" 字符串4的字节长度: " << wcslen(wszChar4) * sizeof(wchar_t 多字节字符集及宽字节字符集的兼容 使用_T、TCHAR等实现程序对多字节字符集及宽字节字符集的兼容 版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。
(COLLATION),当然一个字符集也可能相应多个校对规则,可是两个不同的字符集不能相应同一个规则。 事实上这里有几个地方须要注意,首先,我们的sql语句里面的"文件1"原生编码就是终端编码UTF8,也就是'\xe6\x96\x87\xe4\xbb\xb61',而导出数据的语句SELECT * FROM t1 INTO OUTFILE '文件1',依照前面的说法,由于character_set_filesystem为binary,因此'\xe6\x96\x87\xe4\xbb\xb61'不会转换,这样终于还是 '\xe6\x96\x87\xe4\xbb\xb61',这样在zh_CN.UTF8的系统中文件名称不会乱码.而假设我们设置了character_set_filesystem=UTF8,则原生的'\xe6 \x96\x87\xe4\xbb\xb61'会先依照GBK解码,然后用UTF8编码,最后的结果是"\xe9\x8f\x82\xe5\x9b\xa6\xe6\xac\xa21",这样文件名称就会乱码了.所以这个变量也最好不要改动
字符集 我们使用mysql时,不管是库还是表,我们都要设置字符集,而我们常用的字符集都有什么呢? utf8 也就是utf8mb3,用1到3个字节表示一个字符。 utf8mb4 用1到4个字节表示一个字符,可存储表情。 比较规则 一个字符集可以有多个比较规则,其中有一个默认的比较规则;一个比较规则必须对应一个字符集。 字符集与比较规则的级别 字符集级别有4种。 服务器级别 数据库级别 表级别 列级别
UTF8字符集: Unicode字符集的一种, 支持了所有国家的文字字符, utf8采用1-4个字节表示字符. GBK字符集: 支持中文, 字符有一字节编码和两字节编码方式. 一. | | character_set_connection | utf8mb4 | | character_set_database | utf8mb4 character set xxx; (4) 修改表的字符集 只修改表的字符集, 影响后续该表新增列的默认定义, 已有列的字符集不受影响. mysql> alter table table_name general_ci | | collation_database | utf8mb4_general_ci | | collation_server | utf8mb4_general_ci mysql> create table t2(id int,name varchar(20)) character set=utf8mb4 collate=utf8mb4_bin; Query OK,
3f | 隋 腆 脾 腓 腑 胼 腱 腮 腥 腦 腴 膃 膈 膊 膀 e4 4f | 膂 膠 膕 膤 膣 腟 膓 膩 膰 膵 膾 膸 膽 臀 臂 膺 e4 5f | 臉 臍 臑 臙 臘 臈 臚 臟 臠 臧 臺 臻 臾 舁 舂 舅 e4 6f | 與 舊 舍 舐 舖 舩 舫 舸 舳 艀 艙 艘 艝 艚 艟 艤 e4 80 | 艢 艨 艪 艫 舮 艱 艷 艸 艾 芍 芒 芫 芟 芻 芬 苡 e4 90 | 苣 苟 苒 苴 苳 苺 莓 范 苻 苹 苞 茆 苜 茉 苙 e4 9e | 茵 茴 茖 茲 茱 荀 茹 荐 荅 茯 茫 茗 茘 莅 莚 e4 3f | f4 4f | f4 5f | f4 90 | f4 9e | f4
at com.ambition.business.service.impl.MedicineOrderTotalServiceImpl$$EnhancerBySpringCGLIB$$20daa1f4. 表字符集: ? 将表字符集都改成utf8,运行起来还是报错。 可以在客户端工具上直接修改,也可以使用以下语句修改: alter table medicine_product default character set utf8; 库字符集: ? 将库字符集也改成utf8,还是报错,吐血!!!但是还得继续。 , `create_time` datetime DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
在传统的EXP导出文件中,记录着导出使用的字符集id,通过查看导出文件头的第2、3个字节,我们可以找到十六进制表示的字符集ID,在Windows上,可以使用UltraEdit等工具打开dmp文件,查看其导出字符集 在文件开始部分就记录了数据库的字符集、国家字符集及时区等信息,在表字段的属性部分也记录了字符集ID: ? 由于很多数据库最初以US7ASCII字符集存储中文,单纯通过导出导入是无法完成字符集转换的。 对于这种情况,可以通过设置导出字符集为US7ASCII,原样导出数据;导出后修改导出文件的第二、三字符,修改0001为0354,这样就可以将US7ASCII字符集的数据正确导入到ZHS16GBK的数据库中 如果导出文件使用的字符集是US7ASCII,目标数据库的字符集是ZHS16GBK,就可以使用create database的方法来修改,具体操作如下: ? ?