mikewang 最近的时间轴更新
mikewang's repos on GitHub
JavaScript · 247 人关注
ClashScan
在线检测您是否在使用 Clash
Python · 71 人关注
GoLibCookie
(已失效)我去图书馆 免抓包 获取Cookie
JavaScript · 47 人关注
ad.js
An ad blocker.停更
Java · 35 人关注
ChxUtility
超星(Chaoxing)实用工具。学习通挂机、下载(可最小化挂机)。
JavaScript · 25 人关注
GoLib.js
Node.js 我去图书馆自动预约脚本
Python · 2 人关注
ID3flac
Enable macOS FLAC cover art
JavaScript · 0 人关注
24Points
A 24points game resolver.
C++ · 0 人关注
action-test
0 人关注
action-tmate
Debug your GitHub Actions via SSH by using tmate to get access to the runner system itself.
JavaScript · 0 人关注
ad.js_ghp
PHP · 0 人关注
BiliHelper
(Bilibili)B 站自动领瓜子、直播助手、直播挂机脚本 - PHP 版
Python · 0 人关注
bilive
always online at live.bilibili
C · 0 人关注
bindhook
A bind(3) hook to set SO_REUSEADDR
C · 0 人关注
box86
Box86 - Linux Userspace x86 Emulator with a twist, targeted at ARM Linux devices
0 人关注
Detours
Detours is a software package for monitoring and instrumenting API calls on Windows. It is distributed in source code form.
0 人关注
Dockerfile
Python · 0 人关注
DocumentDetector
A document detector.
Shell · 0 人关注
Dropbox-Uploader
Dropbox Uploader is a BASH script which can be used to upload, download, list or delete files from Dropbox, an online file sharing, synchronization and backup service.
C · 0 人关注
elfutils
C · 0 人关注
EsDialerGD
广东天翼校园三方客户端(登陆器)
C# · 0 人关注
FontLoad
A tiny tool for loading fonts temporarily in Windows.
JavaScript · 0 人关注
fruit-ninja
the fruit ninja game by js
JavaScript · 0 人关注
Ghost
Just a blogging platform
0 人关注
go-cqhttp
cqhttp的golang实现,轻量、原生跨平台.
Python · 0 人关注
goagent
a gae proxy
C++ · 0 人关注
GoldenDB
Forked from https://github.com/jzload/DB For testing purpose only.
Go · 0 人关注
goproxy
a go proxy
JavaScript · 0 人关注
html5-audio-editor
A small audio editor written in html5 and javascript without usage of external plugins
Swift · 0 人关注
iina
The modern video player for macOS.
0 人关注
jspaint
🎨 Classic MS Paint, REVIVED + ✨Extras
mikewang

mikewang

V2EX 第 81681 号会员,加入于 2014-11-15 12:40:16 +08:00
今日活跃度排名 53
坑爹的字符集问题:踩到了 MySQL 的 bug
  •  3   
    MySQL  •  mikewang  •  1 天前  •  最后回复来自 KickAssTonight
    22
    坑爹的 GBK:大家都应该去用 UTF-8
  •  2   
    C  •  mikewang  •  1 天前  •  最后回复来自 v2tudnew
    98
    B 站网页端 后台到底在偷偷做什么
    哔哩哔哩  •  mikewang  •  7 天前  •  最后回复来自 mikewang
    6
    复活 CentOS 7 的 VSCode Remote - SSH
  •  2   
    Visual Studio Code  •  mikewang  •  24 天前  •  最后回复来自 ysc3839
    16
    C++ 开发不想 996,如何跳槽转到 Java ?
    职场话题  •  mikewang  •  40 天前  •  最后回复来自 archxm
    70
    [长文] 移动白名单上传限速机制,以及解决办法
  •  4   
    宽带症候群  •  mikewang  •  12 天前  •  最后回复来自 hi543
    38
    移动换着花样阻止我上传,给我气笑了
  •  1   
    宽带症候群  •  mikewang  •  71 天前  •  最后回复来自 qingmuhy0
    24
    14 岁的我,注册了 V2EX。
  •  9   
    程序员  •  mikewang  •  172 天前  •  最后回复来自 liuchengfeng1
    90
    Clash 检测工具的原理
    信息安全  •  mikewang  •  172 天前  •  最后回复来自 xxxbin
    46
    代理检测:在线检测您是否在使用 Clash
  •  19   
    信息安全  •  mikewang  •  165 天前  •  最后回复来自 nuevepicos
    154
    mikewang 最近回复了
    不关机,似乎说的大多数是 MacBook 。并且 MacBook 插电源和不插电源差距也挺大的。
    插电源的话,合盖还能 ping 通,还能 ssh 进去。跑什么命令都没问题。
    不插电源,过一段时间就掉线了,ssh 也不行。应该是进入了更深层次的睡眠。

    Mac Mini 应该是一直插电的,可能就没有那种体验了(?)
    1 天前
    回复了 mikewang 创建的主题 MySQL 坑爹的字符集问题:踩到了 MySQL 的 bug
    @xiangyuecn #20
    你确实发现了一个令很多人困惑的地方:SQL 中的“相等”,其实是概念上的等价,不是完全的相同。

    排序规则( collation ),规定了 order by 的顺序,也规定了哪些字符串是“相等”的,等号运算会返回真,group by 会被分到一组。
    如果对排序规则了解不深,我推荐阅读一些相关的资料,这样奇奇怪怪的问题就能迎刃而解了。

    以 MySQL 为例吧,设置 set collation_connection=utf8mb4_general_ci;
    select 'abc' = 'ABC'; -- 你会发现它们是相等的,结果为 1 。
    select hex('abc') = hex('ABC'); -- 你会发现结果为 0 ,不等。

    select 'abc' = 'abc '; -- 相等
    select length('abc') = length('abc '); -- 不等

    其实也没什么问题。因为“排序规则”规定了它们等价。但是它们又不是同一个东西,所以套一层函数就不等了。
    当然你也可以选一个 NO PAD 的规则,让它们自身不等。

    set collation_connection=utf8mb4_0900_ai_ci;
    select 'abc' = 'abc '; -- 不等
    select length('abc') = length('abc '); -- 不等

    这些都是可以配置的,并且不同数据库上的默认配置可能有所不同。

    希望对你有所帮助。
    1 天前
    回复了 mikewang 创建的主题 MySQL 坑爹的字符集问题:踩到了 MySQL 的 bug
    @lance6716 #18 优秀 d(^_^o)
    2 天前
    回复了 mikewang 创建的主题 MySQL 坑爹的字符集问题:踩到了 MySQL 的 bug
    @lepig #5
    如果是全新的业务,那么用默认的排序规则 utf8mb4_0900_ai_ci ,或者它的哥们(大小写敏感/不敏感)都是 OK 的。
    这里考虑到一些已有的老库,比如它们的排序规则已经定在 utf8mb4_bin 了,那么除非重新进行完整的测试,那最好还是别动它,一般还按原来的用。
    2 天前
    回复了 mikewang 创建的主题 MySQL 坑爹的字符集问题:踩到了 MySQL 的 bug
    @wuyiccc #6
    因为其实问题不在这(虽然有一定逻辑关系在里面),问题在于查询优化。

    可以看一下 my_like_range_mb() 的实现,它的注释里面有:

    > "a" is the smallest possible string for NO PAD.
    > "a\0\0..." is the smallest possible string for PAD SPACE.
    > "a\xff\xff..." is the biggest possible string.

    其实 MySQL 是意识到这个问题的。但是后面的 if 条件是 (cs->state & MY_CS_BINSORT) || cs->pad_attribute == NO_PAD
    单独把 MY_CS_BINSORT 加入判断,我觉得这个是没有理由的,且造成了 bug 。我的 patch 就是把它去掉了,测试用例可以通过。
    2 天前
    回复了 mikewang 创建的主题 MySQL 坑爹的字符集问题:踩到了 MySQL 的 bug
    @wqtacc #2 你说的对,但是不能否认 utf8mb4_bin 它确实有 bug 。其实不止这一个有问题,可以试试 gbk_bin 、gb18030_bin 等,也是一样的。

    @Nasei #3 字符集排序规则行为是不能改变。但是如果改变 like 转化为范围查询的内部逻辑呢?那就是可行的了。其实是能修的。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2532 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 15:32 · PVG 23:32 · LAX 08:32 · JFK 11:32
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.