› MySQL 5.5 Community Server
› MySQL 5.6 Community Server
› Percona Configuration Wizard
› XtraBackup 搭建主从复制
Great Sites on MySQL
› Percona
› MySQL Performance Blog
› Severalnines
推荐管理工具
› Sequel Pro
› phpMyAdmin
推荐书目
› MySQL Cookbook
MySQL 相关项目
› MariaDB
› Drizzle
参考文档
› http://mysql-python.sourceforge.net/MySQLdb.html
xuecat
V2EX  ›  MySQL

遇见个多国字符问题!

  •  
  •   xuecat · Jul 12, 2018 · 4880 views
    This topic created in 3035 days ago, the information mentioned may be changed or developed.
    1. Å, å,这是丹麦的
    2. Ä ä,这是德语的
    3. A a 这是英文得

    我现在问题是 mysql(人名表):

    用 like 检索 `Å`,`A`, `Ä`中任意一个,会出现包含 1,2,3 的字符串(1,2,3 代表上面的外国语字符)
    用 instr,lacate 检索`Å`,`Ä`中任意一个,会出现包含 1,2 的字符串
    

    期望结果检索Ä只匹配出包含它的字符,检索Å只匹配出包含它的字符。 求解!!多谢。。。。

    13 replies  •  2018-07-12 16:04:37 +08:00
    zjp
    zjp
    Jul 12, 2018 via Android
    1
    字符集和排序规则是什么,应该用 utb8mb4 和 utf8mb4_unicode_ci
    xuecat
    xuecat
    OP
    Jul 12, 2018
    2
    @zjp
    字符集是 utf8 -- utf-8 unicode
    排序规则 utf8_general_ci
    thetydead
    thetydead
    Jul 12, 2018
    3
    字符集使用 utb8mb4,这才是真的 utf-8 字符
    scnace
    scnace
    Jul 12, 2018 via Android
    4
    楼上正解 mysql 的 utf8 是个坑 utf8mb4 才是 utf8
    zjp
    zjp
    Jul 12, 2018
    5
    @xuecat 测试了下才发现 utf8_unicode_ci 没有作用,一直以为它是基于 Unicode 码点进行比较...应该是 utf8_bin 才对,实测可行。

    mb4 和你的问题没有关系,不应该提这个的...
    xuecat
    xuecat
    OP
    Jul 12, 2018
    6
    @zjp 我这里好像都不行。。。
    我试了 mb4,也试了 unicode_ci, _bin。都没有达到我得预期。

    SELECT * FROM dbp_log_object as a WHERE locate('Ä',a.objectname)>0
    xuecat
    xuecat
    OP
    Jul 12, 2018
    7
    难道我要重写插入数据?
    xuecat
    xuecat
    OP
    Jul 12, 2018
    8
    insert into DBP_LOG_OBJECT values(111,1,0,-1,'TeamÅ','',0,'');
    insert into DBP_LOG_OBJECT values(112,1,0,-1,'TeamÄ','',0,'');
    SELECT * FROM dbp_log_object as a WHERE locate('Ä',a.objectname)>0

    SELECT * FROM dbp_log_object as a WHERE instr(a.objectname,'Ä')

    还是不行,我分别用 mb4,再次插入等,查出来都不行。。。。
    xuecat
    xuecat
    OP
    Jul 12, 2018
    9
    @scnace @thetydead
    还有点子吗?
    timonwong
    timonwong
    Jul 12, 2018
    11
    试试
    SELECT * FROM dbp_log_object as a WHERE locate('Ä' collate utf8_bin, a.objectname)>0
    timonwong
    timonwong
    Jul 12, 2018❤️2
    12
    简单的说,你要指定 string literal 的 collate
    xuecat
    xuecat
    OP
    Jul 12, 2018
    13
    @timonwong 老哥多谢,对了。果然要指定字符
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1342 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 35ms · UTC 21:21 · PVG 05:21 · LAX 13:21 · JFK 16:21
    ♥ Do have faith in what you're doing.