varchar(255)를 일반적으로 사용하고 있으나 facebook에서 명백히 제시한 형태가 없고 변화의 가능성이 있다. 그러므로 text를 이야기하는 사람도 있음.

http://m.blog.naver.com/PostView.nhn?blogId=hopefuldream&logNo=140110566940 에서 참조

XML은 익히 많이 들어봐서 대충~ 무엇이다라는건 알고 있지만 확실히 무엇인지..
DTD는 무엇인지 스키마는 무엇인지 잘 모르는 분들이 계실겁니다.

XML은 정해진 데이터 표현법이라고 볼 수 있습니다. 생긴모습은
<booklist>
    <book id=“스트럿츠1”>
        <저자>홍길동</저자>
        <가격>10000원</가격>
    </book>
    <book id=“스프링”>
        <저자>김갑순</저자>
        <가격>20000원</가격>
    </book>
</booklist>
이렇게 생겼습니다.. HTML과도 비슷하게 생긴 도데체 이게 뭐 어쨌다는거냐…라고 물으신다면..
제가 상상한 다음과 같은 이야기를 해야할것 같습니다.

서로다른 업체 혹은 프로그램끼리 데이터를 주고받는 방법은 사실 매우 많습니다. 예를들어, 김개발씨가 통합서점프로그램을 만들면서
홍길동씨에게 이렇게 말합니다.
“야, 길동아. 나 이번에 통합서점프로그램 만드는 중이니까, 너네 서점 책목록좀 줘봐. 내가 정해준 형태로 줘야 프로그램에서
분석해 쓰거든? 내가 정한 형태로 메모장에 작성해서 텍스트 형태로 줘”
이렇게 말합니다. 김개발씨는 텍스트문서에

책=스트럿츠, 스프링, 아이바티스
가격=10000, 20000, 30000
저자=홍길동, 김갑순, 슈아

이런식으로 써서 주면, 프로그램에서 파일을 읽어와 데이터를 파싱해서 각각 알맞게 DB에 넣도록 프로그램을 짰던 것입니다.
그리고 이번엔 금당무씨에게 똑같이 말했습니다.
“당무야.. 나 이번에 통합서점프로그램 만드는 중인데…”
그런데 이 당무씨는 순순히 OK 하지 않고 반항을 합니다.
“야임마~ 나 이미 우리 서점프로그램에서 쓰는 데이터 형식 있으니까 그거 갔다가 니가 알아서해라”
그리고선
책{스트럿츠, 홍길동, 10000}
책{스프링, 김갑순, 20000}
이런 형식의 텍스트문서를 던져 줍니다…

무슨 이야기 하는지 아실겁니다. 데이터를 주고받을때 모두 똑같은 형식으로 주고받으면 … 각 프로그램마다 파싱하는 부분을
따로 만들 필요가 없겠지요. 그런데 데이터형식을 회사끼리도 아니고 전세계인이 똑같은 방식으로 만들어 주고받는다??
이게 가능한가?? 가능합니다. XML 이 그런 용도로 쓰입니다.

그렇다면 데이터 주고받을려고 XML만들었나? 저는 그렇다고 생각합니다. 데이터 주고받을일 없으면.. 나혼자 개발하고 혼자 지지고볶고
다 한다면 XML따위는 필요 없다고 생각합니다. 나 혼자 꼴리는대로 데이터 주고받게 만들면 그만이고..
실제 흔히 학원에서 자바 메신져 프로그램 만들기를 마지막 과제로 하는데…
이때 메신져간 데이터를 주고받는 형식을 보면 개발자 맘대로 정하는 경우가 많습니다.

그럼 그 XML 은 어떻게 만드냐??? 그냥 메모장 열어서 다짜고짜
<booklist>
    <book>
    </book>
</booklist>
이렇게 만들고 확장자 xml로 저장하면 그냥 XML문서가되는거냐?? 라고 한다면 네.. 그렇습니다…
특수문자에 대한 규칙이나.. “<” 다음에 공백이 와서는 안된다는 등의 기초적인 규칙만 지켜주면 그게 XML 입니다.
안에 들어가는 booklist 등의 문자를 내맘대로 만들수가 있는 겁니다.
<책목록>
  <책제목></책제목>
</책목록>
이렇게 만들어도 이것도 맞는 XML 인 겁니다.  이렇게 내 맘대로 만들어서 상대방한테 여기 맞춰 데이터 달라고 하면 되는거고
아니면 맘대로 이런 XML형식으로 데이터 줄테니까 맘대로 써라.. 할수도 있는 것입니다.

이렇게 간단하면 DTD는 뭐고 스키마는 뭐냐…
결론은 대중성이라고 생각합니다… 즉, 내가 만든 프로그램을 홍길동씨도 쓰고 김갑순씨도 쓰고 미국에사는 제임스씨도 쓴다는것이죠.
내가 분명
<책목록>
  <책제목></책제목>
</책목록>
이런식으로 데이터를 달라고 했는데, 오지마을에사는 김순덕씨는
<책리스트>
  <책타이틀></책타이틀>
</책타이틀>
이렇게 주는겁니다. 이런사람이 안생길까요? 절대로 생깁니다. 특히 공개된 대중적인 프로그램이라면..
예를들어 RSS 같은경우 RSS 형식에 맞게 데이터를 표현해야 RSS리더 프로그램에서 RSS를 읽습니다.
그런데 아랫층사는 박판돌씨는 그냥 멋대로 XML을 만들고 RSS리더 프로그램에서 RSS를 읽히려고 합니다.

그래서 아예 내가 원하는대로 XML을 표현하게 규제를 해합니다.. 그게 DTD, 스키마 입니다…
DTD 가 최초 XML 형식을 정의하는 언어였는데 그게 개선된것이 스키마 구요.. 둘다 목표는 같은겁니다…
데이터정의언어… 왜? 규제할라고.김순덕씨같은 사람들때문에…

에이..난 대중에 공개할일도 없고 개발자는 나 혼자인데요???
그럼 DTD고 스키마고 나발이고간에 만들필요 없습니다. 그냥 XML문서 내 맘대로 만들고 프로그램에서 돌리면 됩니다.

그럼 DTD나 스키마 쓴거랑 안쓴거랑 어떻게 구분하고 규제하고 하는가???

XML문서의 초기부분에..
<?xml version=“1.0” encoding=“euc-kr” ?>
<booklist>
    <book>….
이렇게만 쓰면.. 규제고 뭐고 하는거 없고 그냥 내맘대로 XML형식에만 어긋나지 않게 만들면 됩니다만…
<?xml version=“1.0” encoding=“euc-kr” ?>
<booklist xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance
                      xsi:noNamespaceSchemaLocation=“test.xsd”>
이렇게 덧붙여서 시작하면..test.xsd 에서 선언한대로 xml 문서를 만들어야 합니다… 틀리면…
XML문서를 읽어들이는 프로그램의 파서가 에러를 내뱉습니다..
XML문서를 읽어들이는 프로그램으로 우리는 주로 인터넷 익스플로러를 사용하지요… 이 인터넷 익스플로러 안에
XML을 파싱하는 프로그램이 내장되어 있습니다.. 요놈이 “에러야!!크흑!!!!컥!!!” 하면서 에러를 뱉어냅니다..

 

http://dev.mysql.com/doc/refman/5.5/en/floating-point-types.html 에서 참조

 

11.2.2. Fixed-Point Types (Exact Value) – DECIMAL, NUMERIC

The DECIMAL and NUMERIC types store exact numeric data values. These types are used when it is important to preserve exact precision, for example with monetary data. In MySQL, NUMERIC is implemented as DECIMAL, so the following remarks about DECIMAL apply equally to NUMERIC.

MySQL 5.5 stores DECIMAL values in binary format. See Section 12.18, “Precision Math”.

In a DECIMAL column declaration, the precision and scale can be (and usually is) specified; for example:

salary DECIMAL(5,2)

In this example, 5 is the precision and 2 is the scale. The precision represents the number of significant digits that are stored for values, and the scale represents the number of digits that can be stored following the decimal point.

Standard SQL requires that DECIMAL(5,2) be able to store any value with five digits and two decimals, so values that can be stored in the salary column range from -999.99 to 999.99.

In standard SQL, the syntax DECIMAL(M) is equivalent to DECIMAL(M,0). Similarly, the syntax DECIMAL is equivalent to DECIMAL(M,0), where the implementation is permitted to decide the value of M. MySQL supports both of these variant forms of DECIMAL syntax. The default value of M is 10.

If the scale is 0, DECIMAL values contain no decimal point or fractional part.

The maximum number of digits for DECIMAL is 65, but the actual range for a given DECIMAL column can be constrained by the precision or scale for a given column. When such a column is assigned a value with more digits following the decimal point than are permitted by the specified scale, the value is converted to that scale. (The precise behavior is operating system-specific, but generally the effect is truncation to the permissible number of digits.)

11.2.3. Floating-Point Types (Approximate Value) – FLOAT, DOUBLE

The FLOAT and DOUBLE types represent approximate numeric data values. MySQL uses four bytes for single-precision values and eight bytes for double-precision values.

For FLOAT, the SQL standard permits an optional specification of the precision (but not the range of the exponent) in bits following the keyword FLOAT in parentheses. MySQL also supports this optional precision specification, but the precision value is used only to determine storage size. A precision from 0 to 23 results in a 4-byte single-precision FLOAT column. A precision from 24 to 53 results in an 8-byte double-precision DOUBLE column.

MySQL permits a nonstandard syntax: FLOAT(M,D) or REAL(M,D) or DOUBLE PRECISION(M,D). Here, “(M,D)” means than values can be stored with up to M digits in total, of which D digits may be after the decimal point. For example, a column defined as FLOAT(7,4) will look like -999.9999 when displayed. MySQL performs rounding when storing values, so if you insert 999.00009 into a FLOAT(7,4) column, the approximate result is 999.0001.

Because floating-point values are approximate and not stored as exact values, attempts to treat them as exact in comparisons may lead to problems. They are also subject to platform or implementation dependencies. For more information, see Section C.5.5.8, “Problems with Floating-Point Values”

For maximum portability, code requiring storage of approximate numeric data values should use FLOAT or DOUBLE PRECISION with no specification of precision or number of digits.