gpt4 book ai didi

MySQL 按分隔符分割字符串的函数不适用于波兰语特殊字符

转载 作者:行者123 更新时间:2023-11-29 12:22:30 24 4
gpt4 key购买 nike

这个函数可以成功地从字符串中抓取单行,直到它是带有一些波兰语特殊字符的文本

DELIMITER $$
DROP FUNCTION SPLIT_STR $$

CREATE FUNCTION SPLIT_STR(x VARCHAR(1500) CHARSET utf8 COLLATE utf8_unicode_ci, delim VARCHAR(12) CHARSET utf8 COLLATE utf8_unicode_ci, pos INTEGER)
RETURNS VARCHAR(500) CHARSET utf8 COLLATE utf8_unicode_ci
BEGIN
DECLARE output VARCHAR(1500) CHARSET utf8 COLLATE utf8_unicode_ci;
SET output = REPLACE(SUBSTRING(SUBSTRING_INDEX(x, delim, pos)
, LENGTH(SUBSTRING_INDEX(x, delim, pos - 1)) + 1)
, delim
, '');
RETURN output;
END $$

如您所见,我正在手动设置字符集和排序规则(与整个数据库使用的相同)。我也尝试过不使用字符集和排序规则设置,但它不起作用。

要重现的输出(这就是它作为单个字段存储在数据库中的方式):

śńąśąńśąńśąńóńśńąśąńśąńśąńóń
śńąśąńśąńśąńóń
sas

通过做

SELECT
SPLIT_STR(slides.content1, '\n', 1),
SPLIT_STR(slides.content1, '\n', 2),
SPLIT_STR(slides.content1, '\n', 3),

我实际上只得到第一行(其他 2 个字段为空)

śńąśąńśąńśąńóńśńąśąńśąńśąńóń

最佳答案

CHAR_LENGTH() 返回字符长度,而 LENGTH() 返回字节长度。当您打算处理字符长度时,尤其是在处理多字节字符集时,您应该始终使用CHAR_LENGTH(),其中两个函数之间的结果可能不同。

在函数中将 LENGTH() 替换为 CHAR_LENGTH() 可能会解决该问题。

关于MySQL 按分隔符分割字符串的函数不适用于波兰语特殊字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28816726/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com