WHERE子句带重音字符查询失效,UNISTR函数无法解决
解决Oracle查询含重音字符无结果的问题
检查数据库连接字符集
代码端的数据库连接必须和Oracle数据库字符集(建议AL32UTF8)匹配,否则重音字符会在传输过程中乱码。如果用PHP的OCI扩展,初始化连接时要指定字符集:$conn = oci_connect($username, $password, $db_dsn, 'AL32UTF8');如果你用的是封装的
$database类,确认其底层连接配置了正确的UTF8字符集参数。直接使用UTF8字符串替代UNISTR
你当前写法里的UNISTR('Job é')可能因为代码文件编码或字符串转义问题失效,试试直接传入UTF8格式的查询字符串(确保代码文件本身保存为UTF8编码):$database->Parse("SELECT ID_WORKSPACE_USERS, LOGIN_WORKSPACE_USERS, FONCTION_WORKSPACE_USERS FROM WORKSPACE_USERS WHERE FONCTION_WORKSPACE_USERS = 'Job é'" );正确使用UNISTR的Unicode转义格式
UNISTR函数需要传入Unicode十六进制转义序列,不是直接写带重音的字符。比如é的Unicode编码是U+00E9,要写成:// PHP中双引号字符串需要转义反斜杠,所以用\\00E9 $database->Parse("SELECT ID_WORKSPACE_USERS, LOGIN_WORKSPACE_USERS, FONCTION_WORKSPACE_USERS FROM WORKSPACE_USERS WHERE FONCTION_WORKSPACE_USERS = UNISTR('Job \\00E9')" );验证数据库字段的字符集
先确认目标字段的字符集是否支持UTF8,执行以下SQL查询:SELECT COLUMN_NAME, CHAR_CS FROM ALL_TAB_COLUMNS WHERE TABLE_NAME = 'WORKSPACE_USERS' AND COLUMN_NAME = 'FONCTION_WORKSPACE_USERS';如果字段字符集不是AL32UTF8/UTF8,可尝试在查询时做字符集转换:
$database->Parse("SELECT ID_WORKSPACE_USERS, LOGIN_WORKSPACE_USERS, FONCTION_WORKSPACE_USERS FROM WORKSPACE_USERS WHERE CONVERT(FONCTION_WORKSPACE_USERS, 'AL32UTF8') = 'Job é'" );
内容的提问来源于stack exchange,提问作者vh-dev-web
相关产品推荐
相关产品推荐

