问题描述:
向数据库中插入一条String类型的数据,在数据库中该字段定义为varchar2(64),一开始使用String.length()来进行数据的长 度校验,如果数据是纯英文,那么是没有问题的,但是如果数据中包含中文,校验可以通过,但是在数据入库时经常会报数据超长。
问题分析:
既然问题是数据超长,那么问题应该就是出在数据长度校验上,也就是出在String.length()这个方法上,来看看jdk是如何描述这个方法的:
length public int length()返回此字符串的长度。长度等于字符串中 Unicode 代码单元的数量。 指定者: 接口 CharSequence 中的 length 返回: 此对象表示的字符序列的长度。 public static void main(String[] args) throws UnsupportedEncodingException { String a = "123abc"; System.out.println(a.length()); a = "中文"; System.out.println(a.length()); }
结果为6和2。这个方法判断的是String串的字符长度,但是数据库中却是以字节来判断数据长度的(varchar2)。如果String串为纯 英文,那么一个英文字母是一个字符,长度为1,占1个字节,是不会出错的,但是如果String串中包含中文,一个中文汉字也是一个字符,长度为1,但是 却占多个字节(具体占几个字节跟使用的编码有关),那么如果数据中包含中文,数据的长度就很有可能会超过数据库中对应字段的长度限制。
解决方式:
既然是判断数据长度时以字符为标准导致出错,那么思路就很明确了,在进行数据长度校验时,取数据的字节长度:
public static void main(String[] args) throws UnsupportedEncodingException { String a = "123abc"; int num = a.getBytes("utf-8").length; System.out.println(num); a = "中文"; num = a.getBytes("utf-8").length; System.out.println(num); }
结果为6和6,为什么转换成utf-8呢,因为数据库使用的是utf-8编码,既然数据最终是要存到数据库中,那么首先先要保证数据在程序中时、在数据库 中时的编码一致(同一个字符在不同的编码格式中所占的字节位数不一致,这点很关键),然后再保证程序和数据库判断数据长度的方式一致,才能避免程序校验通 过,入库时却提示数据长度超长的问题。
转自 http://blog.csdn.net/a19881029/article/details/7902701
相关推荐
这个过程涉及到字节顺序的理解,以及Java中的数据类型转换。以下是关于这个主题的详细解释。 首先,16进制是一种数字表示方式,每4个字符代表一个字节(8位)。浮点数在计算机内部通常是用二进制的格式存储的,具体...
在Java编程语言中,数据类型分为两大类:基本类型(primitive types)和引用类型。基本类型直接存储值,而引用类型则存储指向对象的引用。本文将深入探讨Java中的基本类型以及String类型的特性与用法。 #### Java...
### MySQL与Java数据类型对应详解 #### 概述 在进行数据库操作时,尤其是在使用Java进行MySQL数据库开发的过程中,正确地映射数据类型是至关重要的一步。本文将详细介绍MySQL中的各种数据类型及其在Java中的对应...
在 Java 语言中,char[] 和 String 类型都是常用的数据类型,但是在实际应用中,开发者经常会遇到关于这两个类型占用字节大小的问题。下面我们将通过实例代码来详细介绍 Java 中 char[] 和 String 类型占用字节大小...
在Java编程语言中,字符串(String)是经常需要与各种数据类型进行转换的。本文主要讨论的是Java中String类型的转换,包括字符串转换为数值类型、数值转换为字符串、不同进制间的转换以及字节数组与数值类型之间的转换...
在Java编程中,`String`类是最常用的数据类型之一,用于处理文本数据。它是一个不可变类,意味着一旦创建了一个`String`对象,其内容就不能更改。这使得`String`类在多线程环境中非常安全,同时也带来了一些性能上的...
在Java编程语言中,`String`类是使用最频繁的类之一,它代表不可变的字符序列。本文将深入解析`String`类的一些常用方法,帮助开发者更好地理解和使用这个核心类。 1. **构造方法** - `String()`:创建一个空字符...
Java 和 MySQL 数据类型之间的对比是理解数据库操作和应用程序开发中数据处理的关键。这两种语言的数据类型在功能和使用上都有所不同,尽管它们都用于存储和处理数据,但各自有着特定的适用场景和特点。 首先,Java...
它将每3个字节的数据转换成4个Base64字符,因此,原始数据的长度会被增加约33%。编码过程主要是为了确保数据能够在文本环境中传输,比如电子邮件或者HTTP协议,因为这些环境通常不支持二进制数据。 二、Android中...
帧头包含了帧类型和压缩数据,而帧长度则根据不同的AMR模式变化,范围在12.2到36.8字节之间。因此,计算AMR语音长度的关键在于解析这些帧并累加它们的时间长度。 在Java中,由于标准库并不直接支持AMR文件处理,...
在Java编程中,数据传输或文件读取时,我们经常需要将字节(byte)序列转换为字符串(String)。然而,直接将字节数组转换为字符串可能会导致乱码问题,因为字节数组可能包含非字符编码的字节。为了解决这个问题,...
本章将深入探讨Java中的数据类型,分为两大类:基本数据类型和引用数据类型。 1. 基本数据类型: - 整型:Java提供了四种整数类型,包括byte(1字节,-128到127),short(2字节,-32,768到32,767),int(4字节,...
1. **COBOL到Java的数据类型映射**:COBOL的数值类型(如COMP-3,PACKED-DECIMAL)和字符类型(如PIC X)需要映射到Java的相应数据类型。例如,COMP-3对应Java的byte数组,而PIC X则对应Java的String。 2. **Java...
微信公众平台消息发送接口文档中对消息长度限制为2048字节长度。当需要发送很长的消息内容的时候就需要进行拆分成多条发送。 但是内容中有单字节字符和多字节字符,而且希望在一句话结束或者内容换行的位置进行拆分...
这就意味着当我们按照字节长度截取字符串时,可能会将一个完整的汉字分割成两部分,从而导致乱码。 Java中的`String`类提供了多种截取字符串的方法,如`substring()`、`subSequence()`等,但它们都是基于字符(char...
Java中的`String`类是Java语言中最常用的数据类型之一,用于表示不可变的字符序列。在Java中,字符串被视为对象,它们的实例是由`String`类创建的。下面我们将详细探讨`String`类的一些关键构造方法和方法。 1. **...
Java字符串长度不够,将其前面补0或者后面补0,适用于字典序比较前,将要比较字符串的位数保持一致,再进行比较。
根据给定文件的信息,本文将围绕“JS与Java中判断字符串中文、英文混合长度的方法”这一主题进行深入探讨。文章将分别介绍JavaScript和Java中如何处理包含中文字符和英文字符的混合字符串,并计算其等效长度。 ### ...