› 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 · 4730 views
    This topic created in 2997 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
        1
    zjp  
       Jul 12, 2018 via Android
    字符集和排序规则是什么,应该用 utb8mb4 和 utf8mb4_unicode_ci
    xuecat
        2
    xuecat  
    OP
       Jul 12, 2018
    @zjp
    字符集是 utf8 -- utf-8 unicode
    排序规则 utf8_general_ci
    thetydead
        3
    thetydead  
       Jul 12, 2018
    字符集使用 utb8mb4,这才是真的 utf-8 字符
    scnace
        4
    scnace  
       Jul 12, 2018 via Android
    楼上正解 mysql 的 utf8 是个坑 utf8mb4 才是 utf8
    zjp
        5
    zjp  
       Jul 12, 2018
    @xuecat 测试了下才发现 utf8_unicode_ci 没有作用,一直以为它是基于 Unicode 码点进行比较...应该是 utf8_bin 才对,实测可行。

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

    SELECT * FROM dbp_log_object as a WHERE locate('Ä',a.objectname)>0
    xuecat
        7
    xuecat  
    OP
       Jul 12, 2018
    难道我要重写插入数据?
    xuecat
        8
    xuecat  
    OP
       Jul 12, 2018
    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
        9
    xuecat  
    OP
       Jul 12, 2018
    @scnace @thetydead
    还有点子吗?
    timonwong
        11
    timonwong  
       Jul 12, 2018
    试试
    SELECT * FROM dbp_log_object as a WHERE locate('Ä' collate utf8_bin, a.objectname)>0
    timonwong
        12
    timonwong  
       Jul 12, 2018   ❤️ 2
    简单的说,你要指定 string literal 的 collate
    xuecat
        13
    xuecat  
    OP
       Jul 12, 2018
    @timonwong 老哥多谢,对了。果然要指定字符
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2538 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 07:56 · PVG 15:56 · LAX 00:56 · JFK 03:56
    ♥ Do have faith in what you're doing.