选择包含日语字符的MySQL行

8

有没有可靠的方法(使用mySQL或其他方式)来选择包含日语字符的数据库行?我的数据库中有很多行,其中一些只包含字母数字字符,另一些包含日语字符。


一个简单的SELECT就可以完成任务,所以你能描述一下你的表是什么以及在SELECT之后你正在做什么吗? - Teneff
有没有办法选择包含任何日语字符的行? - Rio
你能否给我们提供 SHOW CREATE TABLE table_name 的输出,其中 table_name 是所讨论表的名称?基于输出内容,您可能能够做到这一点,也可能做不到。 - Charles
我是一名日语使用者。在日语中,虽然只有71个假名字符,但却有超过50,000个汉字字符。因此,编写一个可以匹配超过50,000个不同日语字符的SELECT语句可能是不可行的。 - Leo Galleguillos
5个回答

10

当您在使用字符集时遇到问题时,请遵循以下规则:

  1. 在创建数据库时使用utf8编码:

    CREATE DATABASE  _test DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
    
  2. 确保所有文本字段(varchar和text)都使用UTF-8编码:

  3. 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;
    
  4. 使用phpMyAdmin时,请在登录时选择UTF-8。

  5. 将网页编码设置为UTF-8,以确保所有的post/get数据都是UTF-8编码(否则,转换会很痛苦)。PHP代码(在php文件的第一行或至少在任何输出之前):

  6. header('Content-Type: text/html; charset=UTF-8');
    
  7. 确保您的所有查询都是使用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 . '"';

那应该可以让它工作了。


2

在NickSoft提供的有用答案之后,我不得不设置数据库连接的编码才能使其正常工作。

&characterEncoding=UTF8

然后SET NAMES utf8;似乎是多余的。


0
如teneff所述,只需使用SELECT
安装MySQL时,请使用UTF-8作为字符集。然后,选择utf8_general_ci作为排序规则即可完成工作。

0

正如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表示另一个范围,以此类推。


实际上,我认为您会想要使用utf8_bin排序方法。这将按字节逐个比较它们。在UTF-8中,这意味着更高的Unicode值始终会比较晚。这样,您就可以在Unicode图表中查找各种日语字符的范围,并在[]内使用每个范围中的第一个和最后一个字符。 - penguin359

-1

日语字符数量有限。您可以使用以下方式进行搜索

SELECT ... LIKE '%カ%'

或者您可以尝试使用十六进制表示法 -

SELECT ...LIKE CONCAT('%',CHAR(0x30ab),'%')

你可能会发现这个UTF-8日语子集很有用 http://www.utf8-chartable.de/unicode-utf8-table.pl?start=12448

假设你正在使用UTF-8字符集来处理字段、查询和结果...


有没有办法选择包含任何日语字符的行? - Rio
1
你可以将所有字符组合成一个查询(可能会很慢)codeSELECT ... LIKE '%カ%' OR LIKE '%ア%'值得尝试的是正则表达式codeSELECT ... REGEXP '[カア]' - jhavrda
like '%xxx%'regexp 一样慢,因为它们不使用索引。在这两种情况下,都需要完全扫描表。 - NickSoft
我是一名日语使用者。在日语中,虽然只有71个假名字符,但却有超过50,000个汉字字符。因此,编写一个可以匹配超过50,000个不同日语字符的SELECT语句可能是不可行的。 - Leo Galleguillos

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接