范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

技术分享

  作者:傅同学
  爱可生研发部成员,主要负责中间件产品开发,热衷技术原理。
  本文来源:原创投稿
  *爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。
  本公众号之前发表了一些关于MySQL字符集的文章: 从utf8转换成utf8mb4 、 字符集相关概念 、 有关SQL 语句 、 字符集注意事项 、 乱码问题.
  近日, 在为 爱可生开源数据传输工具dtle 增加UTF-32字符集支持过程中,笔者又了解了一下 MySQL 字符集机制。下面补充说明一些内容: 1 字符集ASCII 是最基础的字符集,每个 ASCII 字符占用1字节,ASCII 仅利用了8位编码能力的一半,最高位恒为 0 。 Latin1 字符集利用剩下的一半编码了西欧常用字母。 UCS-2 使用2字节编码,容量为65536 。 UTF-16 在这基础上, 增加了临时使用2个2字节,编码特殊字符的能力。 UTF-32 使用定长4字节编码。 GB 系列、UTF-8 等字符集,0~127编码和 ASCII 一样,使用单字节。在最高位不为0时,额外使用1~3字节编码。 即它们是变长编码,每个字符占用1~4字节
  只表达 ASCII 0~127字符的话,Latin1、GB系列、UTF8 等编码是完全相同的. 而 UTF16 和 UTF32 则会有额外的空白。 mysql> select          hex(convert("sql" using latin1)) as a,          hex(convert("sql" using gbk)) as b,          hex(convert("sql" using utf8mb4)) as c,          hex(convert("sql" using utf16)) as d,          hex(convert("sql" using utf32)) as e;  | a      | b      | c      | d            | e                        | +--------+--------+--------+--------------+--------------------------+ | 73716C | 73716C | 73716C | 00730071006C | 00000073000000710000006C |
  使用如下 SQL 语句可以看到当前 MySQL 实例支持的字符集(和collation)。 mysql> SELECT CHARACTER_SET_NAME, COLLATION_NAME, ID FROM INFORMATION_SCHEMA.COLLATIONS          ORDER BY CHARACTER_SET_NAME, ID; ... | gb18030            | gb18030_chinese_ci       | 248 | | gb18030            | gb18030_bin              | 249 | | gb18030            | gb18030_unicode_520_ci   | 250 | ... | utf8mb4            | utf8mb4_general_ci       |  45 | | utf8mb4            | utf8mb4_bin              |  46 | | utf8mb4            | utf8mb4_unicode_ci       | 224 | ... 题外:什么是 collation
  A collation is a set of rules that defines how to compare and sort character strings.
  MySQL文档: collation是进行字符串比较或排序时使用的规则. 例如: 大小写是否敏感( c ase  s ensitive /  i nsensitive) 特殊的相等规则:  ij = ij 2 MySQL 系列参数
  执行 SQL  show variables like "character%"  可以获得MySQL中关于字符集的几个参数。character_set_client character_set_connection character_set_results character_set_server -- 注: 下面3个参数一般无需关心 character_set_filesystem character_set_database character_set_system
  第06期:梳理 MySQL 字符集的相关概念 中" 六、字符集系统参数"一节进行了解释,但稍有误差。 2.1 参数 character_set_clientcharacter_set_client  并不是客户端使用的字符集.用户输入什么数据, 客户端就发送什么数据. 字符集由用户输入决定. character_set_client  是服务端的参数.服务端认为客户端发来的数据是以  character_set_client  编码的.
  character_set_client 不能被设置为以下几个字符集 (参考链接):ucs2 utf16 / utf16le utf32
  不难发现其共同点为: 都是多字节编码. 至于限制的原因本文不作展开。 2.2 参数 character_set_connection
  根据MySQL文档
  (after receiving them) The server converts statements sent by the client from  character_set_client  to character_set_connection . Exception: For string literals that have an introducer such as _utf8mb4  or _latin2 ...
  即收到客户端发来的语句后,服务端(mysqld)会将语句从 character_set_client 转换为character_set_connection 。(除了指明字符集的字符串字面量, 如 _utf8mb4"中文字符串" .)2.3 SET NAMES 语句mysql> SET NAMES gb2312;
  MySQL文档: 该语句设定3个关于 character set 的变量: character_set_client , character_set_connection  和 character_set_results . 该语句不设置  character_set_server  。
  注: MySQL客户端的 --default-character-set 参数效果和SET NAMES 语句一样。$ mysql -h ... --default-character-set=gb2312 3 一个乱码原因的勘误
  之前发表的 第09期:有关 MySQL 字符集的乱码问题 "一、转码失败"一节中有如下案例 -- 我的终端字符集是 utf8 ...  -- 新建立一个连接,客户端这边字符集为 gb2312 root@ytt-pc:/home/ytt# mysql --default-character-set=gb2312 ...  ... -- 表的字符集为 utf8 mysql> create database ytt_new10; mysql> create table ytt_new10.t1(a1 varchar(100)) charset utf8mb4;  -- 插入一条数据,有两条警告信息 mysql> insert into ytt_new10.t1 values ("病毒滚吧!"); Query OK, 1 row affected, 2 warnings (0.01 sec) ...  -- 那检索出来看到,数据已经不可逆的乱码了。 mysql> select * from ytt_new10.t1; | a1        | +-----------+ | ??? ??  |
  该文认为乱码原因是"客户端编码设置成和表编码不一致"。
  但可以发现:即使客户端和表的编码都是 gb2312 ,仍然会产生乱码。 -- 在上述gb2312 MySQL session中 mysql> create table ytt_new10.t2(a1 varchar(100)) charset gb2312; mysql> insert into ytt_new10.t2 values ("病毒滚吧!"); Query OK, 1 row affected, 2 warnings (0.02 sec)  mysql> select * from ytt_new10.t2; +------+ | a1   | +------+ |      |
  事实上,MySQL 知道 character_set_client = gb2312 ,也知道t1 表编码为utf8。写入过程中,MySQL 会进行转换,不应当发生乱码。
  发生乱码的真正原因是: 我们发送给 MySQL 的数据 ,并不是以 gb2312 编码的。是我们欺骗了 MySQL 。
  insert ... "("病毒滚吧!") 这个语句, 是以终端字符集 utf8 编码的. MySQL 把 utf8 数据当作 gb2312 数据, 转换成 utf8 数据, 自然产生了乱码.
  让我们以 gb2312 发送数据: # 终端编码为UTF-8. 使用iconv转换文件编码. $ echo "insert into ytt_new10.t1 val("病毒滚吧!");" | iconv -f utf8 -t gb2312 > insert-gb.txt $ cat insert-gb.txt # 终端无法正常显示GB2312字符 insert into t1 val("???????ɣ?"); $ mysql -h ... --default-character-set=gb2312 < insert-gbk.txt
  SELECT 时, MySQL 会把数据转换成 character_set_results 再返回给客户端. 终端可能不支持非 UTF8 字符的显示, 需要转换.$ mysql ... --default-character-set=utf8 -e "select * from ytt_new10.t1" 病毒滚吧! $ mysql ... --default-character-set=gb2312 -e "select..." | iconv -f gb2312 -t utf8 病毒滚吧! 4 字符集 client 到 connection转换的意义
  收到客户端发来的语句后, 服务端会将语句从  character_set_client  转换为 character_set_connection
  这个步骤乍一看多此一举 直接以 client 字符集执行, MySQL也会正常转换到表字符集.也可以让客户端直接以 connection 字符集发送语句.
  那么,为什么不将两个参数合并呢? 搜索发现, 使用转换层的潜在原因如下:
  不同字符集的某些行为是完全不同的 mysql> set character_set_connection = "utf8"; mysql> select length("hello"); |               5 |  mysql> set character_set_connection = "utf32"; mysql> select length("hello"); |              20 |
  由于 character_set_client 的限制,客户端不能直接以 UTF32 等字符集发送语句。如果我们就是想要 UTF32 下的行为(函数结果、排序规则等),就需要由 MySQL 进行一层转换。

德美中三国Robotaxi商业落地进度对比谁被低估了?电子发烧友网报道(文梁浩斌)最近,小马智行宣布中标广州市南沙区2022年出租车运力指标,小马智行也成为了国内首家获得出租车经营许可的自动驾驶企业。几天后的4月28日,北京市智能网联自动驾驶商业化运营按下快进键自动驾驶商业化运营再度按下快进键。近日,北京市发放无人化载人示范应用通知书,百度小马智行成为首批获准企业,北京也由此成为国内首个开启乘用车无人化运营试点的城市。无人化载人示范应用通自动化PLC程序编程万能模板珍藏版一个完整的PLC程序一般有以下几个部分组成,文字粗糙但句句实用1开机状态初始化部分开机的时候,对系统中的一些变量进行复位,防止因为某些保持寄存器状态保持导致系统误动作2系统初始化部小巧又舒适,还能三模切换!洛斐小翘机械键盘评测相信电脑玩家对于键鼠等外设都有一定的追求,我也不例外,特别是对于各种机械键盘有着近乎偏执的喜爱,各种轴体在指尖的回馈能让我在使用中更加愉悦,当然,其自身的颜值也是不能忽略的。这里就火箭炮音响加持超高沉浸感的音画体验,东芝电视65英寸M540F体验前言少年不知愁滋味,每每在家电卖场走到东芝电视展区总是喜欢多看一会,即使播放的总是那反复循环的测试片东芝电视那鲜艳的色彩如同魔法一直印在趴趴的心里,直到现在都没办法忘怀所以一提到电变身毒苹果?全球首个DMP漏洞,仅A14M1等苹果芯片独有近来的苹果,可以说是很好地诠释了一个词树大招风。前有各大监管机构查它垄断命其开放,后有竞争公司不断挖角窃取机密,甚至就在日前,还有研究人员在AppleSilicon中发现了世界首个首发预约价仅399元!性价比之王360儿童手表10X火热预约孩子的安全一直以来都是家长们最担心的问题,时刻掌握孩子的状况对于家长来说尤为重要,儿童电话手表就可以更好地守护孩子安全。360今日发布的新款儿童手表10X,升级了10重高精定位,让华虹半导体一季度收入再创新高全速推进12英寸产线扩产吴科任中国证券报中证网中证网讯(记者吴科任)5月12日午间,华虹半导体公布2022年一季度业绩情况。公司单季收入达到创纪录的5。95亿美元,同比增长95。1,环比增长12。6归母净黑龙江特大喜讯华为百度京东腾讯中兴通讯天津中科智能识别研究院6家数字经济头部企业同时选择落户黑龙江5月12日至13日集中签约祝贺东北老大哥!东北的教育水平名列前茅,因为就业机会少,大部分学子都离机器人能产生自己的文明吗?首先我们要明白人类文明产生的过程和内涵,就不难理解机器人文明的产生。人类文明产生,有的理论说产生于劳动,有的说产生于使用工具,等等。从现在对动物观察,有的动物会使用火,有的动物会使马斯克希望解封特朗普推特账号特朗普解封也不用5月12日消息,据国外媒体报道,当地时间周二,马斯克表示他希望撤回推特对唐纳德特朗普的禁令。马斯克公开证实,待收购推特的交易完成,将恢复美国前总统特朗普被禁的推特账号。他表示,这是
盖茨为什么会成为世界首富?说到比尔盖茨的财富,很多人可能首先想到的是比尔盖茨精明的投资,因为这些年他通过跟巴菲特学投资,光靠投资就带来了超过700亿美元的财富,而微软所带来的财富只占其总财富的18左右。但我极米newz6x投影仪一个月深度体验评测作为工作的租房党,对拥有一台大屏观影设备种草已久,电视现在其实已经白菜价了,但是考虑到搬家等因素,所以买了投影仪结合这些天几乎每天都在用的使用体验,分享给xdm1投影效果晚上关灯使天玑90002K柔性屏OIS防抖,比OPPO便宜2800元,热销120W旗舰机有消息称,vivoiQOO10Pro高端机将搭载天玑9000处理器,按照该系列高端机的定价,基本是5000元机型,这样一来又拉高了天玑9000的价格,首款搭载的是OPPOFindXAce系列手机曝光,或隶属于一加品牌,还会是曾经的那个Ace手机吗据网络爆料大神数码闲聊站爆料,一加有一款搭载天玑8100的新机就是一加Ace系列。是的,就是曾经OPPOAce的那个Ace。依旧主打快充和游戏,所以堆了150W超级闪充天玑8100荣耀Magic系列发布一起来看看这次荣耀的产品吧第一款荣耀Magic4荣耀Magic4这款手机采用6。81英寸的双曲屏幕,超窄边框,支持120HZ自适应刷新率和1920HZ高频PWM调光,10。7亿色彩显示,DCIP3广色域。前C之门课程系列28串口通信在。NET平台下创建C串口通信程序,。NET2。0提供了串口通信的功能,其命名空间是System。IO。Ports。这个新的框架不但可以访问计算机上的串口,还可以和串口设备小身材大音量高颜值SanagX6S蓝牙音箱SANAG无线蓝牙音箱大音量159购买其实对于女生来说,音箱的材质音质性能参数这些,基本上入不了女生的眼。颜值才是最重要的。所以说,男生给女生挑选礼物时,一定要挑选好看的礼物,这一通过使用guavaretrying实现灵活的重试机制概述本文将介绍guavaretrying是什么,有什么用,以及如何在项目中合理运用。guavaretrying是一个线程安全的Java重试类库,提供了一种通用方法去处理任意需要重试华为Mate50不用自家麒麟芯片,改用骁龙?华为Mate50系列之前爆料出中央处理器要么使用自家麒麟90004G版芯片,要么使用高通骁龙8Gen14G版芯片,但是最后使用哪一家我们不得而知,根据最新消息来看,华为Mate50华为Mate50Pro曝光首发鸿蒙3。0系统,或搭载骁龙8Gen14G芯片日前,网上有关华为Mate50Pro的爆料越来越多,也成为近期手机板块的一大热议话题,借此机会,小编也整理了部分有关华为Mate50Pro的信息供大家参考讨论,一起来看看吧。小编了即日起,排查中央网信办等开展专项行动整治算法滥用乱象记者8日从中央网信办获悉,中央网信办牵头开展清朗2022年算法综合治理专项行动,即日起至2022年12月初,将深入排查整改互联网企业平台算法