MySQL存储全角字符和半角字符的区别

很不巧公司内测IM的时候又遇到MYSQL_DATA_TRUNCATED错误,日志记录还是在mysql_stmt_fetch调用的时候出现的。鉴于之前的经验,应该是给定的结果集绑定区域长度不够造成的,反复检查了好多遍没发现问题。我在代码中都是对应的关系,比如char(20),我代码中就会定义char buffer[20]数组来存储。看起来如此的正确完美。后面没办法只好打印每一行的数据,找到报错的那一行记录,发现字体和别的不一样。比如:

123456789(半角)
123456789(全角)

这并不是我输入空格控制的,而是输入法全角半角控制的。对于全角字符,它是半角字符长度的两倍,而我的MySQL使用了utf-8,所以在数据库中那就是一个全角字符长度是3个字节。

select length(column) from table_name where…;

用这个来打印长度就可以判断出来。这个时候你就要考虑一个代码中类型的长度和数据库字段长度匹配的问题了,比如全角字符或者中文字符。数据库中的char(20)代表的是20个字符,而不是20个字节,这里要注意,所以取数据的时候千万不要全部使用这个20来做结果集长度来取数据。

(0)

相关推荐

  • MySQL存储全角字符和半角字符的区别

    很不巧公司内测IM的时候又遇到MYSQL_DATA_TRUNCATED错误,日志记录还是在mysql_stmt_fetch调用的时候出现的.鉴于之前的经验,应该是给定的结果集绑定区域长度不够造成的,反复检查了好多遍没发现问题.我在代码中都是对应的关系,比如char(20),我代码中就会定义char buffer[20]数组来存储.看起来如此的正确完美.后面没办法只好打印每一行的数据,找到报错的那一行记录,发现字体和别的不一样.比如: 123456789(半角) 123456789(全角) 这并不

  • php代码把全角数字转为半角数字

    //把全角数字转为半角数字 function GetAlabNum($fnum){     $nums = array('0','1','2','3','4','5','6','7','8','9','.','-','+',':');     $fnums = array('0','1',  '2','3',  '4','5',  '6', '7','8',  '9','.',  '-', '+',':');     $fnlen = count($fnums);     for($i=0;$i

  • Oracle全角数字转换半角数字

    数据库表 test 字段 id name age 全角数字:1234 半角数字:1234 length和lengthb的区别: length(1234) 4 lengthb(1234) 8 to_single_byte函数用法: to_single_byte(1234) 1234 查找所有全角的数字: select age from test where lengthB(age) >4 替换全角的为半角的: update test t1 set t1.age = (select to_singl

  • MySQL存储引擎MyISAM与InnoDB的9点区别

    虽然MySQL里的存储引擎不只是MyISAM与InnoDB这两个,但常用的就是它俩了.可能有站长并未注意过MySQL的存储引擎,其实存储引擎也是数据库设计里的一大重要点,那么博客系统应该使用哪种存储引擎呢?下面我们分别来看两种存储引擎的区别. MySQL存储引擎MyISAM与InnoDB的区别 一.InnoDB支持事务,MyISAM不支持,这一点是非常之重要.事务是一种高级的处理方式,如在一些列增删改中只要哪个出错还可以回滚还原,而MyISAM就不可以了. 二.MyISAM适合查询以及插入为主的

  • SqlServer数据库全角转换成半角

    复制代码 代码如下: CREATE   FUNCTION   f_Convert( @str   NVARCHAR(4000),   --要转换的字符串 @flag   bit                             --转换标志,0转换成半角,1转换成全角 )RETURNS   nvarchar(4000) AS BEGIN DECLARE   @pat   nvarchar(8),@step   int,@i   int,@spc   int IF   @flag=0 SEL

  • MySQL存储引擎简介及MyISAM和InnoDB的区别

    MyISAM:默认的MySQL插件式存储引擎,它是在Web.数据仓储和其他应用环境下最常使用的存储引擎之一.注意,通过更改 STORAGE_ENGINE 配置变量,能够方便地更改MySQL服务器的默认存储引擎. InnoDB:用于事务处理应用程序,具有众多特性,包括ACID事务支持. BDB:可替代InnoDB的事务引擎,支持COMMIT.ROLLBACK和其他事务特性. Memory:将所有数据保存在RAM中,在需要快速查找引用和其他类似数据的环境下,可提供极快的访问. Merge:允许MyS

  • java 全角半角字符转换的方法实例

    如果搞明白了Java中全角字符和半角字符之间的关系那他们之间的转换根本就不是个事. 可以通过下面的程序看看Java中所有字符以及对应编码的值 复制代码 代码如下: public static void main(String[] args) {        for (int i = Character.MIN_VALUE; i <= Character.MAX_VALUE; ++i) {            System.out.println(i + "    " + (c

  • Python实现全角半角字符互转的方法

    前言 相信对于每一个编程人员来说,在文本处理的时候,经常会遇到全角半角不一致的问题.于是需要程序能够快速的在两者之间互转.由于全角半角本身存在着映射关系,所以处理起来并不复杂. 具体规则为: 全角字符unicode编码从65281~65374 (十六进制 0xFF01 ~ 0xFF5E) 半角字符unicode编码从33~126 (十六进制 0x21~ 0x7E) 空格比较特殊,全角为 12288(0x3000),半角为 32(0x20) 而且除空格外,全角/半角按unicode编码排序在顺序上

  • python3实现全角和半角字符转换的方法示例

    前言 本文主要给大家介绍了关于python3中全角和半角字符转换的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 一.背景介绍 解决什么问题:快速方便的对文本进行全角半角自动转换 适用什么场景:学生答题数据中全角字符替换为半角字符 二.全角半角原理 全角即:Double Byte Character,简称DBC 半角即:Single Byte Character,简称SBC 在 windows 中,中文和全角字符都占两个字节,并且使用了 ascii chart 2 (

  • java全角、半角字符的关系以及转换详解

    如果搞明白了Java中全角字符和半角字符之间的关系 那他们之间的转换根本就不是个事. 全角字符与半角字符的关系 可以通过下面的程序看看Java中所有字符以及对应编码的值 复制代码 代码如下: public static void main(String[] args) {        for (int i = Character.MIN_VALUE; i <= Character.MAX_VALUE; ++i) {            System.out.println(i + " 

随机推荐