有没有可靠的方法(使用mySQL或其他方式)来选择包含日语字符的数据库行?我的数据库中有很多行,其中一些只包含字母数字字符,另一些包含日语字符。
有没有可靠的方法(使用mySQL或其他方式)来选择包含日语字符的数据库行?我的数据库中有很多行,其中一些只包含字母数字字符,另一些包含日语字符。
当您在使用字符集时遇到问题时,请遵循以下规则:
在创建数据库时使用utf8编码:
CREATE DATABASE _test DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
确保所有文本字段(varchar和text)都使用UTF-8编码:
CREATE TABLE _test.test (
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
PRIMARY KEY (`id`)
) ENGINE = MyISAM;
当你建立连接并在查询/更新数据库之前,请执行以下操作:SET NAMES utf8;
使用phpMyAdmin时,请在登录时选择UTF-8。
将网页编码设置为UTF-8,以确保所有的post/get数据都是UTF-8编码(否则,转换会很痛苦)。PHP代码(在php文件的第一行或至少在任何输出之前):
header('Content-Type: text/html; charset=UTF-8');
确保您的所有查询都是使用UTF8编码编写的。如果使用PHP:
6.1 如果PHP支持UTF-8编码 - 只需使用UTF-8编写文件即可。
6.2 如果php未编译支持UTF-8 - 可以按照以下方式将字符串转换为UTF-8:
$str = mb_convert_encoding($str, 'UTF-8', '<put your file encoding here');
$query = 'SELECT * FROM test WHERE name = "' . $str . '"';
那应该可以让它工作了。
在NickSoft提供的有用答案之后,我不得不设置数据库连接的编码才能使其正常工作。
&characterEncoding=UTF8
然后SET NAMES utf8;似乎是多余的。
SELECT
。utf8_general_ci
作为排序规则即可完成工作。正如Frosty所说,只需使用SELECT。
在http://www.unicode.org/roadmaps/bmp/的Unicode图表中查找最低和最高价值的日文字符,并使用REGEXP。它可能会使用几个不同的字符区域来获取整个日文字符集。只要使用UTF-8字符集和utf8_general_ci排序规则,您就可以使用REGEXP '[a-gk-nt-z]',其中a-g表示图表中一个Unicode字符范围,k-n表示另一个范围,以此类推。
日语字符数量有限。您可以使用以下方式进行搜索
SELECT ... LIKE '%カ%'
或者您可以尝试使用十六进制表示法 -
SELECT ...LIKE CONCAT('%',CHAR(0x30ab),'%')
你可能会发现这个UTF-8日语子集很有用 http://www.utf8-chartable.de/unicode-utf8-table.pl?start=12448
假设你正在使用UTF-8字符集来处理字段、查询和结果...
code
SELECT ... LIKE '%カ%' OR LIKE '%ア%'值得尝试的是正则表达式code
SELECT ... REGEXP '[カア]' - jhavrdalike '%xxx%'
和 regexp
一样慢,因为它们不使用索引。在这两种情况下,都需要完全扫描表。 - NickSoftSELECT
语句可能是不可行的。 - Leo Galleguillos
SELECT
就可以完成任务,所以你能描述一下你的表是什么以及在SELECT
之后你正在做什么吗? - TeneffSHOW CREATE TABLE table_name
的输出,其中table_name
是所讨论表的名称?基于输出内容,您可能能够做到这一点,也可能做不到。 - CharlesSELECT
语句可能是不可行的。 - Leo Galleguillos