Mysql学习MySQL教程
《Mysql学习MySQL教程》要点: 问题还原使用 erlang 存储一些特殊字符串到 MySQL 的时候,这些字符串的二进制格式如下:MYSQL实例
<<240,159,152,134,240,144>>
查看二进制的 unicode 是什么?
14>?unicode:characters_to_list(<<240,144>>).[128518,128528]15>?erlang:integer_to_list(128518,16).%%查看十六进制"1F606"16>?erlang:integer_to_list(128528,16)."1F610"
明显, ?MYSQL实例 1F606 和 1F610 代表什么?根据 unicode 官网上的说明,这是一种 emoji(表情符号),具体的展示形式与厂商有关.MYSQL实例 ?MYSQL实例 ?MYSQL实例 MySQL 上存储失败的原因目前来说,多数 MySQL 都是以 utf8 存储,注意 MySQL?的 utf8 和我们所说的传统 utf8 有点区别.MySQL 的 utf8 编码规定了最多只能有 3 个字节,而 emoji 的 unicode 已经超过了?3?个字节,因此?MySQL 的 utf8 无法识别与存储 emoji.MYSQL实例 为此可以查阅 MySQL 中关于 unicode 支持的资料,从中可以得知 MySQL 在 5.5 后开始支持 utf8mb4,这种编码支持 1 ~ 4 个字节,这种编码可以表示 emoji.MYSQL实例 另外 utf8mb4 向下兼容 utf8.MYSQL实例 ?MYSQL实例 解决方案将 MySQL 中对应的字段改成 utf8mb4 编码:MYSQL实例
ALTER?TABLE?t1??DEFAULT?CHARACTER?SET?utf8mb4,??MODIFY?col1?CHAR(10)????CHARACTER?SET?utf8mb4?COLLATE?utf8mb4_unicode_ci?NOT?NULL,??MODIFY?col2?CHAR(10)????CHARACTER?SET?utf8mb4?COLLATE?utf8mb4_bin?NOT?NULL;
将连接库的连接编码改为 utf8mb4,以 erlang 的连接库 emysql 为例:MYSQL实例
emysql:add_pool(pool,[{size,1},{user,"user"},{password,"password"},{host,"host"},{port,3306},{encoding,utf8mb4}]).%%或者emysql:add_pool(pool,1,"user","password","host",3306,undefined,?utf8mb4).
为了建表方便,可以修改 my.cnf:MYSQL实例
#?服务器字符集[mysql]default-character-set=utf8mb4[mysqld]character-set-server=utf8mb4 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |