Web 技术研究所

我一直坚信着,Web 将会成为未来应用程序的主流

MySQL储存4字节字符

  之前介绍四字节字符的文章中曾经出现过MySQL的utf8无法写入4字节字符的问题。确实是MySQL的utf8不支持4字节字符。但MySQL提供了可以支持4字节字符的utf8mb4,所以储存方面是没问题的。只是写入时需要稍做处理,因为SQL语句可能使用不同的字符集。
  首先,我们创建一个这样的表 drop table if exists test;
create table test(t varchar(16) charset utf8mb4);
  这个名为test的表中,t的字段就是utf8mb4的字符串储存,它可以写入4字节字符。但是如果我们这么插入数据的话 insert into test values('𠐀');   虽然可以写入成功,但实际上只写入了奇怪的东西。因为SQL语句本身是字符串,它有自己的编码,可能不支持4字节字符。所以一种安全的写法是使用二进制的方式写入。 insert into test values(0xF0A09080);   这样是可以成功写入数据库的,但也许在查询时还有问题。因为查询的结果也是一字符串的形式传递的,这个字符串可能不支持4字节字符。解决的办法同样是使用二进制。 set charset binary;
select t from test;
  先把编码设置为二进制,这样就可以正常查询出结果了。 /*连接数据库略*/ $data=bin2hex('𠐀𠐁𠐂𠐃𠐄'); mysql_query("drop table if exists test"); mysql_query("create table test(t varchar(16) charset utf8mb4)"); mysql_query("insert into test values(0x$data)"); mysql_query("set charset binary"); $r=mysql_query("select t from test"); $x=mysql_fetch_row($r); print_r($x[0]);
网名:
3.80.32.*
电子邮箱:
仅用于接收通知
提交 悄悄的告诉你,Ctrl+Enter 可以提交哦
神奇海螺
[查看全部主题]
各类Web技术问题讨论区
发起新主题
本模块采用即时聊天邮件通知的模式
让钛合金F5成为历史吧!
次碳酸钴的技术博客,文章原创,转载请保留原文链接 ^_^