MySQL 無內建拼音函數,解法:建立拼音區間對照表,利用字元編碼順序(GBK/Big5 中漢字按拼音排序)以 `BETWEEN` 篩選首字拼音。
DROP TABLE IF EXISTS `pinyin`;
CREATE TABLE `pinyin` (
`py` VARCHAR(1) NOT NULL,
`hz1` VARCHAR(1) NOT NULL COMMENT '該拼音起始漢字',
`hz2` VARCHAR(1) NOT NULL COMMENT '該拼音結束漢字',
PRIMARY KEY (`py`)
) DEFAULT CHARSET=gbk;
INSERT INTO `pinyin` (`py`,`hz1`,`hz2`) VALUES
('A','吖','驁'), ('B','八','簿'), ('C','嚓','錯'), ('D','咑','鵽'),
('E','妸','樲'), ('F','發','鰒'), ('G','猤','腂'), ('H','妎','夻'),
('J','丌','攈'), ('K','咔','穒'), ('L','垃','鱳'), ('M','嘸','旀'),
('N','丆','桛'), ('O','噢','漚'), ('P','妑','曝'), ('Q','七','囕'),
('R','呥','鶸'), ('S','仨','蜶'), ('T','他','籜'), ('W','屲','鶩'),
('X','夕','鑂'), ('Y','丫','韻'), ('Z','帀','咗');
關鍵:資料庫/表/連線字元集必須為 gbk(或 big5),否則區間比對失效。
-- 列出所有文章標題及其首字拼音
SELECT p.py, a.*
FROM `article` a
JOIN `pinyin` p ON a.`title` BETWEEN p.hz1 AND p.hz2
ORDER BY p.py, a.`title`;
py title
Z 招聘
Z 專題
W 網站介紹
W 問吧
S 搜索
L 聯系方式
L 論壇
H 會員
G 關於我們
B 版權聲明
B 百科
SELECT py FROM pinyin WHERE '漢字' BETWEEN hz1 AND hz2; -- 回傳 'H'
GENERATED COLUMN 自動計算(需自訂函數)。