我有一个带有存储变音符号的 varchar2 字段的 Oracle 数据库。我还有一个通过 ODBC 连接到数据库的 PHP 应用程序。整个事情在Linux上运行。
变音符号的问题是现在它们被转换为普通字母,例如 ä => a,但仅在 PHP-Application 和 isql 程序中。如果我使用 sqlplus 或 Oracle Web GUI,一切正常,这告诉我问题出在 odbc 连接上。
我只是不知道如何配置 ODBC,所以它使用正确的编码......
编辑 连接是通过
odbc_connect(DSN, User, PW)
我知道 DSN 对应于 /root/.odbc.ini 或 /etc/odbc.ini 中的配置。我不完全确定,因为我没有设置系统并且我没有经验完全是 ODBC。目前 DSN 为“NAPA”,/etc/odbc.ini 文件具有以下设置:
[NAPA]
Driver = Oracle 11g ODBC driver
DSN = OracleODBC-11g
ServerName = localhost
UserID = *****
Password = ****
NLS_LANG = AMERICAN.WE8MSWIN1252
Charset = utf8
数据库参数是
SQL> SELECT * FROM NLS_DATABASE_PARAMETERS;
+-------------------------------+-----------------------------------------+
| PARAMETER | VALUE |
+-------------------------------+-----------------------------------------+
| NLS_LANGUAGE | AMERICAN |
| NLS_TERRITORY | AMERICA |
| NLS_CURRENCY | $ |
| NLS_ISO_CURRENCY | AMERICA |
| NLS_NUMERIC_CHARACTERS | ., |
| NLS_CHARACTERSET | WE8MSWIN1252 |
| NLS_CALENDAR | GREGORIAN |
| NLS_DATE_FORMAT | DD-MON-RR |
| NLS_DATE_LANGUAGE | AMERICAN |
| NLS_SORT | BINARY |
| NLS_TIME_FORMAT | HH.MI.SSXFF AM |
| NLS_TIMESTAMP_FORMAT | DD-MON-RR HH.MI.SSXFF AM |
| NLS_TIME_TZ_FORMAT | HH.MI.SSXFF AM TZR |
| NLS_TIMESTAMP_TZ_FORMAT | DD-MON-RR HH.MI.SSXFF AM TZR |
| NLS_DUAL_CURRENCY | $ |
| NLS_COMP | BINARY |
| NLS_LENGTH_SEMANTICS | BYTE |
| NLS_NCHAR_CONV_EXCP | FALSE |
| NLS_NCHAR_CHARACTERSET | AL16UTF16 |
| NLS_RDBMS_VERSION | 10.2.0.1.0 |
+-------------------------------+-----------------------------------------+