MySQL:utf8字符串上的奇怪LENGTH()行为 [英] MySQL : strange LENGTH() behaviour on utf8 string

查看:70
本文介绍了MySQL:utf8字符串上的奇怪LENGTH()行为的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在对请求生成器进行单元测试,并且遇到了 LENGTH 函数的麻烦.

I am doing unit tests on requests generators, and I get in trouble with LENGTH function.

我有两个紧随其后的请求:

I have 2 requests that follows each other :

SHOW VARIABLES LIKE '%character%'

返回以下结果:

array(8) {
  [0] =>
  array(2) {
    'Variable_name' =>
    string(20) "character_set_client"
    'Value' =>
    string(4) "utf8"
  }
  [1] =>
  array(2) {
    'Variable_name' =>
    string(24) "character_set_connection"
    'Value' =>
    string(4) "utf8"
  }
  [2] =>
  array(2) {
    'Variable_name' =>
    string(22) "character_set_database"
    'Value' =>
    string(6) "latin1"
  }
  [3] =>
  array(2) {
    'Variable_name' =>
    string(24) "character_set_filesystem"
    'Value' =>
    string(6) "binary"
  }
  [4] =>
  array(2) {
    'Variable_name' =>
    string(21) "character_set_results"
    'Value' =>
    string(4) "utf8"
  }
  [5] =>
  array(2) {
    'Variable_name' =>
    string(20) "character_set_server"
    'Value' =>
    string(4) "utf8"
  }
  [6] =>
  array(2) {
    'Variable_name' =>
    string(20) "character_set_system"
    'Value' =>
    string(4) "utf8"
  }
  [7] =>
  array(2) {
    'Variable_name' =>
    string(18) "character_sets_dir"
    'Value' =>
    string(26) "/usr/share/mysql/charsets/"
  }
}

我的第二个请求是:

SELECT LENGTH('重庆') as len

它返回6而不是2.

这是怎么了?我的字符集参数看起来不错.

What's wrong here ? My charset parameters looks good.

推荐答案

我在 LENGTH 函数计数字节:

mysql> SELECT LENGTH('重庆') ;
+------------------+
| LENGTH('重庆')   |
+------------------+
|                6 |
+------------------+
1 row in set (0.00 sec)

CHAR_LENGTH 函数计数个字符:

mysql> SELECT CHAR_LENGTH('重庆') ;
+-----------------------+
| CHAR_LENGTH('重庆')   |
+-----------------------+
|                     2 |
+-----------------------+
1 row in set (0.00 sec)

这篇关于MySQL:utf8字符串上的奇怪LENGTH()行为的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆