ruby invalid multibyte char (US-ASCII)

要加上:

# encoding: utf-8

 

一般要加在文件的第一行,否则在这行的上面如果有中文的话,即使是注释也不管用的。

 

http://stackoverflow.com/questions/3678172/ruby-1-9-invalid-multibyte-char-us-ascii

 

http://www.cnblogs.com/liuxiaori/archive/2011/07/10/2102076.html

ruby1.9中文处理

ruby 1.9.2版本中,代码中出现中文会抛出:invalid multibyte char (US-ASCII)异常。google了一下说ruby1.9默认的编码为US-ASCII。所依会抛出异常。

解决办法为,在程序开始位置增加:# encoding: utf-8

示例如下:


   
# encoding: utf - 8 puts 100 p 100 p " 100 " print " 就是为了测试中文 "

运行结果:


   
100 100 " 100 " 就是为了测试中文
Oracle 数据库中 `TO_CHAR` 函数用于将数值或日期类型转换为字符串类型。然而,当用户在使用 `TO_CHAR` 函数时遇到 `ORA-01722: invalid number` 错误,通常表明在隐式或显式转换过程中,数据库尝试将非数字类型转换为数字时失败了。虽然 `TO_CHAR` 本身不会直接导致该错误,但在某些上下文中,例如在 SQL 查询中与非数字字段混合使用时,可能导致 Oracle 引发此错误。 ### 常见原因 - **隐式转换问题**:当 `TO_CHAR` 函数的输入参数原本是字符串类型,但 Oracle 尝试将其隐式转换为数字以执行某些操作(如比较或计算)时,若字符串内容无法转换为有效数字,则会引发 `ORA-01722` 错误。例如: ```sql SELECT TO_CHAR('ABC') FROM dual; ``` 上述语句本身不会报错,但如果 Oracle 在某些上下文中需要将 `'ABC'` 转换为数字,就会导致错误。 - **SQL 查询中的表达式问题**:当 `TO_CHAR` 被用在 `WHERE` 子句中,而数据库优化器尝试将字符串列与数字值进行比较时,可能会触发隐式转换错误。例如: ```sql SELECT * FROM employees WHERE TO_CHAR(employee_id) = 123; ``` 此处 `employee_id` 是数字类型,但 `TO_CHAR(employee_id)` 是字符串,将其与数字 `123` 进行比较时,Oracle 会尝试将字符串转换为数字,从而可能引发错误[^2]。 - **数据中存在非数字字符**:当试图将包含非数字字符的字符串转换为数字时,Oracle 会抛出 `ORA-01722` 错误。例如: ```sql SELECT TO_NUMBER('123A') FROM dual; ``` 此语句会失败,因为 `'123A'` 无法转换为有效的数字。 ### 解决方案 - **显式转换**:确保所有字符串到数字的转换都是显式的,并且输入数据是有效的数字字符串。使用 `TO_NUMBER` 函数时,确保输入字符串符合数字格式。 ```sql SELECT TO_NUMBER('123') FROM dual; ``` - **使用 `REGEXP_LIKE` 验证数据**:在进行转换之前,可以使用正则表达式验证字符串是否为有效的数字格式。例如: ```sql SELECT * FROM employees WHERE REGEXP_LIKE(employee_id, '^[0-9]+$'); ``` - **避免在 `WHERE` 子句中使用 `TO_CHAR` 与数字比较**:尽量避免在 `WHERE` 子句中将数字列转换为字符串并与数字进行比较。如果必须进行此类比较,应确保两边都是字符串类型。 ```sql SELECT * FROM employees WHERE TO_CHAR(employee_id) = '123'; ``` - **使用绑定变量**:在应用程序中使用绑定变量可以减少隐式转换的风险,因为绑定变量的类型通常在执行前就已经确定。 - **检查数据完整性**:定期检查数据库中的数据完整性,确保所有预期为数字的字段确实只包含数字字符。 ### 示例代码 以下是一个示例,展示了如何在 SQL 查询中安全地使用 `TO_CHAR` 函数,避免 `ORA-01722` 错误: ```sql -- 安全使用 TO_CHAR 函数 SELECT * FROM employees WHERE TO_CHAR(employee_id) = '123'; ``` ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值