:meta-keywords: cubrid data types, cubrid type conversion, cubrid numeric types, cubrid date time, cubrid strings, cubrid character, cubrid enum, cubrid blob/clob, cubrid collection types :meta-description: All CUBRID data types and conversion rules. *********** Data Types *********** Numeric Types ============= CUBRID supports the following numeric data types to store integers or real numbers. +----------------------+-----------+---------------------------------+--------------------------------+---------------------+ | Type | Bytes | Min | Max | Exact/approx. | +======================+===========+=================================+================================+=====================+ | **SHORT**, | 2 | -32,768 | 32,767 | exact numeric | | **SMALLINT** | | | | | +----------------------+-----------+---------------------------------+--------------------------------+---------------------+ | **INTEGER**, | 4 | -2,147,483,648 | +2,147,483,647 | exact numeric | | **INT** | | | | | +----------------------+-----------+---------------------------------+--------------------------------+---------------------+ | **BIGINT** | 8 | -9,223,372,036,854,775,808 | +9,223,372,036,854,775,807 | exact numeric | +----------------------+-----------+---------------------------------+--------------------------------+---------------------+ | **NUMERIC**, | 16 | precision *p*: 1 | precision *p*: 38 | exact numeric | | **DECIMAL** | | | | | | | | scale *s*: 0 | scale *s*: 38 | | +----------------------+-----------+---------------------------------+--------------------------------+---------------------+ | **FLOAT**, | 4 | -3.402823466E+38 | +3.402823466E+38 | approximate numeric | | **REAL** | | (ANSI/IEEE 754-1985 standard) | (ANSI/IEEE 754-1985 standard) | floating point : 7 | +----------------------+-----------+---------------------------------+--------------------------------+---------------------+ | **DOUBLE**, | 8 | -1.7976931348623157E+308 | +1.7976931348623157E+308 | approximate numeric | | **DOUBLE PRECISION** | | (ANSI/IEEE 754-1985 standard) | (ANSI/IEEE 754-1985 standard) | floating point : 15 | +----------------------+-----------+---------------------------------+--------------------------------+---------------------+ Numeric data types are divided into exact and approximate types. Exact numeric data types (**SMALLINT**, **INT**, **BIGINT**, **NUMERIC**) are used for numbers whose values must be precise and consistent, such as the numbers used in financial accounting. Note that even when the literal values are equal, approximate numeric data types (**FLOAT**, **DOUBLE**) can be interpreted differently depending on the system. CUBRID does not support the UNSIGNED type for numeric data types. On the above table, two types on the same cell are identical types but it always prints the above type name when you execute :ref:`show-columns-statement` statement. For example, you can use both **SHORT** and **SMALLINT** when you create a table, but it prints "SHORT" when you execute :ref:`show-columns-statement` statement. **Precision and Scale** The precision of numeric data types is defined as the number of significant figures. This applies to both exact and approximate numeric data types. The scale represents the number of digits following the decimal point. It is significant only in exact numeric data types. Attributes declared as exact numeric data types always have fixed precision and scale. **NUMERIC** (or **DECIMAL**) data type always has at least one-digit precision, and the scale should be between 0 and the precision declared. Scale cannot be greater than precision. For **INTEGER**, **SMALLINT**, or **BIGINT** data types, the scale is 0 (i.e. no digits following the decimal point), and the precision is fixed by the system. **Numeric Literals** Special signs can be used to input numeric values. The plus sign (+) and minus sign (-) are used to represent positive and negative numbers respectively. You can also use scientific notations. In addition, you can use currency signs specified in the system to represent currency values. The maximum precision that can be expressed by a numeric literal is 255. **Numeric Coercions** All numeric data type values can be compared with each other. To do this, automatic coercion to the common numeric data type is performed. For explicit coercion, use the **CAST** operator. When different data types are sorted or calculated in a numerical expression, the system performs automatic coercion. For example, when adding a **FLOAT** attribute value to an **INTEGER** attribute value, the system automatically coerces the **INTEGER** value to the most approximate **FLOAT** value before it performs the addition operation. The following is an example to print out the value of **FLOAT** type when adding the value of **INTEGER** type to the value of **FLOAT** type. .. code-block:: sql CREATE TABLE tbl (a INT, b FLOAT); INSERT INTO tbl VALUES (10, 5.5); SELECT a + b FROM tbl; :: 1.550000e+01 This is an example of overflow error occurred when adding two integer values, the following can be an **INTEGER** type value for the result. .. code-block:: sql SELECT 100000000*1000000; :: ERROR: Data overflow on data type integer. In the above case, if you specify one of two integers as the **BIGINT** type, it will determine the result value into the **BIGINT** type, and then output the normal result. .. code-block:: sql SELECT CAST(100000000 AS BIGINT)*1000000; :: 100000000000000 .. warning:: Earlier version than CUBRID 2008 R2.0, the input constant value exceeds **INTEGER**, it is handled as **NUMERIC**. However, 2008 R2.0 or later versions, it is handled as **BIGINT** . INT/INTEGER ----------- The **INTEGER** data type is used to represent integers. The value range is available is from -2,147,483,648 to +2,147,483,647. **SMALLINT** is used for small integers, and **BIGINT** is used for big integers. * If a real number is entered for an **INT** type, the number is rounded to zero decimal place and the integer value is stored. * **INTEGER** and **INT** are used interchangeably. * **DEFAULT** constraint can be specified in a column of this type. :: If you specify 8934 as INTEGER, 8934 is stored. If you specify 7823467 as INTEGER, 7823467 is stored. If you specify 89.8 to an INTEGER, 90 is stored (all digits after the decimal point are rounded). If you specify 3458901122 as INTEGER, an error occurs (if the allowable limit is exceeded). SHORT/SMALLINT -------------- The **SMALLINT** data type is used to represent a small integer type. The value range is available is from -32,768 to +32,767. * If a real number is entered for an **SMALLINT** type, the number is rounded to zero decimal place and the integer value is stored. * **SMALLINT** and **SHORT** are used interchangeably. * **DEFAULT** constraint can be specified in a column of this type. :: If you specify 8934 as SMALLINT, 8934 is stored. If you specify 34.5 as SMALLINT, 35 is stored (all digits after the decimal point are rounded). If you specify 23467 as SMALLINT, 23467 is stored. If you specify 89354 as SMALLINT, an error occurs (if the allowable limit is exceeded). BIGINT ------ The **BIGINT** data type is used to represent big integers. The value range is available from -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807. * If a real number is entered for a **BIG** type, the number is rounded to zero decimal place and the integer value is stored. * Based on the precision and the range of representation, the following order is applied. **SMALLINT** ??**INTEGER** ??**BIGINT** ??**NUMERIC** * **DEFAULT** constraint can be specified in a column of this type. :: If you specify 8934 as BIGINT, 8934 is stored. If you specify 89.1 as BIGINT, 89 is stored. If you specify 89.8 as BIGINT, 90 is stored (all digits after the decimal point are rounded). If you specify 3458901122 as BIGINT, 3458901122 is stored. NUMERIC/DECIMAL --------------- **NUMERIC** or **DECIMAL** data types are used to represent fixed-point numbers. As an option, the total number of digits (precision) and the number of digits after the decimal point (scale) can be specified for definition. The minimum value for the precision *p* is 1. When the precision *p* is omitted, you cannot enter data whose integer part exceeds 15 digits because the default value is 15. If the scale *s* is omitted, an integer rounded to the first digit after the decimal point is returned because the default value is 0. :: NUMERIC [(p[, s])] * Precision must be equal to or greater than scale. * Precision must be equal to or greater than the number of integer digits + scale. * **NUMERIC**, **DECIMAL**, and **DEC** are used interchangeably. * To check how the precision and the scale became changed when you operate with **NUMERIC** typed values, see :ref:`numeric-data-type-op-and-conversion`. * **DEFAULT** constraint can be specified in a column of this type. :: If you specify 12345.6789 as NUMERIC, 12346 is stored (it rounds to the first place after the decimal point since 0 is the default value of scale). If you specify 12345.6789 as NUMERIC(4), an error occurs (precision must be equal to or greater than the number of integer digits). If you declare NUMERIC(3,4), an error occurs (precision must be equal to or greater than the scale). If you specify 0.12345678 as NUMERIC(4,4), .1235 is stored (it rounds to the fifth place after the decimal point). If you specify -0.123456789 as NUMERIC(4,4), -.1235 is stored (it rounds to the fifth place after decimal point and then prefixes a minus (-) sign). FLOAT/REAL ---------- The **FLOAT** (or **REAL**) data type represents floating point numbers. The ranges of values that can be described as normalized values are from -3.402823466E+38 to -1.175494351E-38, 0, and from +1.175494351E-38 to +3.402823466E+38, whereas the values other than normalized values, which are closer to 0, are described as de-normalized values. It conforms to the ANSI/IEEE 754-1985 standard. The minimum value for the precision *p* is 1 and the maximum value is 38. When the precision *p* is omitted or it is specified as seven or less, it is represented as single precision (in 7 significant figures). If the precision *p* is greater than 7 and equal to or less than 38, it is represented as double precision (in 15 significant figures) and it is converted into **DOUBLE** data type. **FLOAT** data types must not be used if you want to store a precise value that exceeds the number of significant figures, as they only store the approximate value of any input value over 7 significant figures. :: FLOAT[(p)] * **FLOAT** is in 7 significant figures. * Extra cautions are required when comparing data because the **FLOAT** type stores approximate numeric. * **FLOAT** and **REAL** are used interchangeably. * **DEFAULT** constraint can be specified in a column of this type. :: If you specify 16777217 as FLOAT, 16777216 is stored and 1.677722e+07 is displayed (if precision is omitted, 8-th digit is rounded up because it is represented as 7 significant figures). If you specify 16777217 as FLOAT(5), 16777216 is stored and 1.677722e+07 is displayed (if precision is in seven or less, 8-th digit is rounded up because it is represented as 7 significant figures). If you specify 16777.217 as FLOAT(5), 16777.216 is stored and 1.677722e+04 is displayed (if precision is in seven or less, 8-th digit is rounded up because it is represented as 7 significant figures). If you specify 16777.217 as FLOAT(10), 16777.217 is stored and 1.677721700000000e+04 is displayed (if precision is greater than 7 and less than or equal to 38, zeroes are added because it is represented as 15 significant figures). DOUBLE/DOUBLE PRECISION ----------------------- The **DOUBLE** data type is used to represent floating point numbers. The ranges of values that can be described as normalized values are from -1.7976931348623157E+308 to -2.2250738585072014E-308, 0, and from 2.2250738585072014E-308 to 1.7976931348623157E+308, whereas the values other than normalized values, which are closer to 0, are described as de-normalized values. It conforms to the ANSI/IEEE 754-1985 standard. The precision *p* is not specified. The data specified as this data type is represented as double precision (in 15 significant figures). **DOUBLE** data types must not be used if you want to store a precise value that exceeds the number of significant figures, as they only store the approximate value of any input value over 15 significant figures. * **DOUBLE** is in 15 significant figures. * Extra caution is required when comparing data because the **DOUBLE** type stores approximate numeric. * **DOUBLE** and **DOUBLE PRECISION** are used interchangeably. * **DEFAULT** constraint can be specified in a column of this type. :: If you specify 1234.56789 as DOUBLE, 1234.56789 is stored and 1.234567890000000e+03 is displayed. If you specify 9007199254740993 as DOUBLE, 9007199254740992 is stored and 9.007199254740992e+15 is displayed. .. note:: MONETARY type is deprecated, and it is not recommended anymore. .. _date-time-type: Date/Time Types =============== Date/time data types are used to represent the date or time (or both together). CUBRID supports the following data types: +------------------+-----------+---------------------------+---------------------------+-----------------------------------------------------------------------+ | Type | bytes | Min. | Max. | Note | +==================+===========+===========================+===========================+=======================================================================+ | **DATE** | 4 | 0001-01-01 | 9999-12-31 | As an exception, DATE '0000-00-00' format is allowed. | +------------------+-----------+---------------------------+---------------------------+-----------------------------------------------------------------------+ | **TIME** | 4 | 00:00:00 | 23:59:59 | | +------------------+-----------+---------------------------+---------------------------+-----------------------------------------------------------------------+ | **TIMESTAMP** | 4 | 1970-01-01 00:00:01 (GMT) | 2038-01-19 03:14:07 (GMT) | As an exception, TIMESTAMP '0000-00-00 00:00:00' format is allowed. | | | | 1970-01-01 09:00:01 (KST) | 2038-01-19 12:14:07 (KST) | | +------------------+-----------+---------------------------+---------------------------+-----------------------------------------------------------------------+ | **DATETIME** | 8 | 0001-01-01 00:00:0.000 | 9999-12-31 23:59:59.999 | As an exception, DATETIME '0000-00-00 00:00:00' format is allowed. | +------------------+-----------+---------------------------+---------------------------+-----------------------------------------------------------------------+ | **TIMESTAMPLTZ** | 4 | Depends on timezone | Depends on timezone | Timestamp with local timezone. | | | | 1970-01-01 00:00:01 (GMT) | 2038-01-19 03:14:07 (GMT) | As an exception, TIMESTAMPLTZ'0000-00-00 00:00:00' format is allowed. | +------------------+-----------+---------------------------+---------------------------+-----------------------------------------------------------------------+ | **TIMESTAMPTZ** | 8 | Depends on timezone | Depends on timezone | Timestamp with timezone. | | | | 1970-01-01 00:00:01 (GMT) | 2038-01-19 03:14:07 (GMT) | As an exception, TIMESTAMPTZ '0000-00-00 00:00:00' format is allowed. | +------------------+-----------+---------------------------+---------------------------+-----------------------------------------------------------------------+ | **DATETIMELTZ** | 8 | Depends on timezone | Depends on timezone | Datetime with local timezone. | | | | 0001-01-01 00:00:0.000 UTC| 9999-12-31 23:59:59.999 | As an exception, DATETIMELTZ '0000-00-00 00:00:00' format is allowed. | +------------------+-----------+---------------------------+---------------------------+-----------------------------------------------------------------------+ | **DATETIMETZ** | 12 | Depends on timezone | Depends on timezone | Datetime with timezone. | | | | 0001-01-01 00:00:0.000 UTC| 9999-12-31 23:59:59.999 | As an exception, DATETIMETZ '0000-00-00 00:00:00' format is allowed. | +------------------+-----------+---------------------------+---------------------------+-----------------------------------------------------------------------+ **Range and Resolution** * By default, the range of a time value is represented by the 24-hour system. Dates follow the Gregorian calendar. An error occurs if a value that does not meet these two constraints is entered as a date or time. * The range of year in **DATE** is 0001 - 9999 AD. * From the CUBRID 2008 R3.0 version, if time value is represented with two-digit numbers, a number from 00 to 69 is converted into a number from 2000 to 2069; a number from 70 to 99 is converted into a number from 1970 to 1999. In earlier than CUBRID 2008 R3.0 version, if time value is represented with two-digit numbers, a number from 01 to 99 is converted into a number from 0001 to 0099. * The range of **TIMESTAMP** is between 1970-01-01 00:00:01 and 2038-01-19 03 03:14:07 (GMT). For KST (GMT+9), values from 1970-01-01 09:00:01 to 2038-01-19 12:14:07 can be stored. timestamp'1970-01-01 00:00:00' (GMT) is the same as timestamp'0000-00-00 00:00:00'. * The range of **TIMESTAMPLTZ**, **TIMESTAMPTZ** varies with timezone, but the value converted to UTC should be between 1970-01-01 00:00:01 and 2038-01-19 03 03:14:07. * The range of **DATETIMELTZ**, **DATETIMETZ** varies with timezone, but the value converted to UTC should be between 0001-01-01 00:00:0.000 and 9999-12-31 23:59:59.999. A value stored in database may no longer be valid if session timezone changes. * The results of date, time and timestamp operations may depend on the rounding mode. In these cases, for Time and Timestamp, the most approximate second is used as the minimum resolution; for Date, the most approximate date is used as the minimum resolution. **Coercions** The **Date** / **Time** types can be cast explicitly using the **CAST** operator only when they have the same field. For implicit coercion, see :ref:`implicit-type-conversion`. The following table shows types that allows explicit coercions. For implicit coercion, see :ref:`arithmetic-op-type-casting`. **Explicit Coercions** +----------------+------+------+----------+-----------+ | FROM \\ TO | DATE | TIME | DATETIME | TIMESTAMP | +================+======+======+==========+===========+ | **DATE** | \- | X | O | O | +----------------+------+------+----------+-----------+ | **TIME** | X | \- | X | X | +----------------+------+------+----------+-----------+ | **DATETIME** | O | O | \- | O | +----------------+------+------+----------+-----------+ | **TIMESTAMP** | O | O | O | \- | +----------------+------+------+----------+-----------+ In general, zero is not allowed in **DATE**, **DATETIME**, and **TIMESTAMP** types. However, if both date and time values are 0, it is allowed as an exception. This is useful in terms that this value can be used if an index exists upon query execution of a column corresponding to the type. * Some functions in which the **DATE**, **DATETIME**, and **TIMESTAMP** types are specified as an argument return different value based on the **return_null_on_function_errors** system parameter if every input argument value for date and time is 0. If **return_null_on_function_errors** is yes, **NULL** is returned; if no, an error is returned. The default value is **no**. * The functions that return **DATE**, **DATETIME**, and **TIMESTAMP** types can return a value of 0 for date and time. However, these values cannot be stored in Date objects in Java applications. Therefore, it will be processed with one of the following based on the configuration of zeroDateTimeBehavior, the connection URL property: being handled as an exception, returning **NULL**, or returning a minimum value (see :ref:`jdbc-connection-conf`). * If the **intl_date_lang** system is configured, input string of :func:`TO_DATE`, :func:`TO_TIME`, :func:`TO_DATETIME`, :func:`TO_TIMESTAMP`, :func:`DATE_FORMAT`, :func:`TIME_FORMAT`, :func:`TO_CHAR` and :func:`STR_TO_DATE` functions follows the corresponding locale date format. For details, see :ref:`stmt-type-parameters` and the description of each function. * Types with timezone follow the same conversion rules as their parent type. .. note:: For literals of date/time types and date/time types with timezone, see :ref:`date-time-literal`. DATE ---- The **DATE** data type is used to represent the year (yyyy), month (mm) and day (dd). Supported range is "01/01/0001" to "12/31/9999." The year can be omitted. If it is, the year value of the current system is specified automatically. The specified input/output types are as follows: :: date'mm/dd[/yyyy]' date'[yyyy-]mm-dd' * All fields must be entered as integer. * The date value is displayed in the type of 'MM/DD/YYYY' in CSQL, and it is displayed in the type of 'YYYY-MM-DD' in JDBC application programs and the CUBRID Manager. * The :func:`TO_DATE` function is used to convert a character string type into a **DATE** type. * 0 is not allowed to input in year, month, and day; however, '0000-00-00', which every digit consisting of year, month, and day is 0, is allowed as an exception. * **DEFAULT** constraint can be specified in a column of this type. :: DATE'2008-10-31' is displayed as '10/31/2008'. DATE'10/31' is displayed as '10/31/2011'(if a value for year is omitted, the current year is automatically specified). DATE'00-10-31' is displayed as '10/31/2000'. DATE'0000-10-31' is displayed as an error (a year value should be at least 1). DATE'70-10-31' is displayed as '10/31/1970'. DATE'0070-10-31' is displayed as '10/31/0070'. TIME ---- The **TIME** data type is used to represent the hour (hh), minute (mm) and second (ss). Supported range is "00:00:00" to "23:59:59." Second can be omitted; if it is, 0 seconds is specified. Both 12-hour and 24-hour notations are allowed as an input format. The input format of **TIME** is as follows: :: time'hh:mi[:ss] [am | pm]' * All items must be entered as integer. * AM/PM time notation is used to display time in the CSQL; while the 24-hour notation is used in the CUBRID Manager. * AM/PM can be specified in the 24-hour notation. An error occurs if the time specified does not follow the AM/PM format. * Every time value is stored in the 24-hour notation. * The :func:`TO_TIME` function is used to return a character string type into a TIME type. * **DEFAULT** constraint can be specified in a column of this type. :: TIME'00:00:00' is outputted as '12:00:00 AM'. TIME'1:15' is regarded as '01:15:00 AM'. TIME'13:15:45' is regarded as '01:15:45 PM'. TIME'13:15:45 pm' is stored normally. TIME'13:15:45 am' is an error (an input value does not match the AM/PM format). TIMESTAMP --------- The **TIMESTAMP** data type is used to represent a data value in which the date (year, month, date) and time (hour, minute, second) are combined. The range of representable value is between GMT '1970-01-01 00:00:01' and '2038-01-19 03:14:07'. The **DATETIME** type can be used if the value is out of range or data in milliseconds is stored. The input format of **TIMESTAMP** is as follows: :: timestamp'hh:mi[:ss] [am|pm] mm/dd[/yyyy]' timestamp'hh:mi[:ss] [am|pm] [yyyy-]mm-dd' timestamp'mm/dd[/yyyy] hh:mi[:ss] [am|pm]' timestamp'[yyyy-]mm-dd hh:mi[:ss] [am|pm]' * All fields must be entered in integer format. * If the year is omitted, the current year is specified by default. If the time value (hour/minute/second) is omitted, 12:00:00 AM is specified. * You can store the timestamp value of the system in the **TIMESTAMP** type by using the :c:macro:`SYS_TIMESTAMP`\ (or :c:macro:`SYSTIMESTAMP`, :c:macro:`CURRENT_TIMESTAMP`). * The :func:`TIMESTAMP` or :func:`TO_TIMESTAMP` function is used to cast a character string type into a **TIMESTAMP** type. * 0 is not allowed to input in year, month, and day; however, '0000-00-00 00:00:00', which every digit consisting of year, month, day, hour, minute, and second is 0, is allowed as an exception. GMT timestamp'1970-01-01 12:00:00 AM' or KST timestamp'1970-01-01 09:00:00 AM' is translated into timestamp'0000-00-00 00:00:00'. * **DEFAULT** constraint can be specified in a column of this type. :: TIMESTAMP'10/31' is outputted as '12:00:00 AM 10/31/2011' (if the value for year/time is omitted, a default value is outputted ). TIMESTAMP'10/31/2008' is outputted as '12:00:00 AM 10/31/2008' (if the value for time is omitted, a default value is outputted ). TIMESTAMP'13:15:45 10/31/2008' is outputted as '01:15:45 PM 10/31/2008'. TIMESTAMP'01:15:45 PM 2008-10-31' is outputted as '01:15:45 PM 10/31/2008'. TIMESTAMP'13:15:45 2008-10-31' is outputted as '01:15:45 PM 10/31/2008'. TIMESTAMP'10/31/2008 01:15:45 PM' is outputted as '01:15:45 PM 10/31/2008'. TIMESTAMP'10/31/2008 13:15:45' is outputted as '01:15:45 PM 10/31/2008'. TIMESTAMP'2008-10-31 01:15:45 PM' is outputted as '01:15:45 PM 10/31/2008'. TIMESTAMP'2008-10-31 13:15:45' is outputted as '01:15:45 PM 10/31/2008'. An error occurs on TIMESTAMP '2099-10-31 01:15:45 PM' (out of range to represent TIMESTAMP). DATETIME -------- The **DATETIME** data type is used to represent a data value in which the data (year, month, date) and time (hour, minute, second) are combined. The range of representable value is between 0001-01-01 00:00:00.000 and 9999-12-31 23:59:59.999 (GMT). The input format of **TIMESTAMP** is as follows: :: datetime'hh:mi[:ss[.msec]] [am|pm] mm/dd[/yyyy]' datetime'hh:mi[:ss[.msec]] [am|pm] [yyyy-]mm-dd' datetime'mm/dd[/yyyy] hh:mi[:ss[.ff]] [am|pm]' datetime'[yyyy-]mm-dd hh:mi[:ss[.ff]] [am|pm]' * All fields must be entered as integer. * If you year is omitted, the current year is specified by default. If the value (hour, minute/second) is omitted, 12:00:00.000 AM is specified. * You can store the timestamp value of the system in the **DATETIME** type by using the :c:macro:`SYS_DATETIME` (or :c:macro:`SYSDATETIME`, :c:macro:`CURRENT_DATETIME`, :func:`CURRENT_DATETIME`, :func:`NOW`) function. * The :func:`TO_DATETIME` function is used to convert a string type into a **DATETIME** type. * 0 is not allowed to input in year, month, and day; however, '0000-00-00 00:00:00', which every digit consisting of year, month, day, hour, minute, and second is 0, is allowed as an exception. * **DEFAULT** constraint can be specified in a column of this type. :: DATETIME'10/31' is outputted as '12:00:00.000 AM 10/31/2011' (if the value for year/time is omitted, a default value is outputted). DATETIME'10/31/2008' is outputted as '12:00:00.000 AM 10/31/2008'. DATETIME'13:15:45 10/31/2008' is outputted as '01:15:45.000 PM 10/31/2008'. DATETIME'01:15:45 PM 2008-10-31' is outputted as '01:15:45.000 PM 10/31/2008'. DATETIME'13:15:45 2008-10-31' is outputted as '01:15:45.000 PM 10/31/2008'. DATETIME'10/31/2008 01:15:45 PM' is outputted as '01:15:45.000 PM 10/31/2008'. DATETIME'10/31/2008 13:15:45' is outputted as '01:15:45.000 PM 10/31/2008'. DATETIME'2008-10-31 01:15:45 PM' is outputted as '01:15:45.000 PM 10/31/2008'. DATETIME'2008-10-31 13:15:45' is outputted as '01:15:45.000 PM 10/31/2008'. DATETIME'2099-10-31 01:15:45 PM' is outputted as '01:15:45.000 PM 10/31/2099'. .. _cast-string-to-datetime: CASTing a String to Date/Time Type ---------------------------------- .. _cast-to-datetime-recommend: Recommended Format for Strings in Date/Time Type ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ When you casting a string to Date/Time type by using the :func:`CAST` function, it is recommended to write the string in the following format: Note that date/time string formats used in the :func:`CAST` function are not affected by locale which is specified by creating DB. Also, in :func:`TO_DATE`, :func:`TO_TIME`, :func:`TO_DATETIME`, :func:`TO_TIMESTAMP` functions, when date/time format is omitted, write the date/time string in the following format. * **DATE** Type :: YYYY-MM-DD MM/DD/YYYY * **TIME** Type :: HH:MI:SS [AM|PM] * **DATETIME** Type :: YYYY-MM-DD HH:MI:SS[.msec] [AM|PM] HH:MI:SS[.msec] [AM|PM] YYYY-MM-DD MM/DD/YYYY HH:MI:SS[.msec] [AM|PM] HH:MI:SS[.msec] [AM|PM] MM/DD/YYYY * **TIMESTAMP** Type :: YYYY-MM-DD HH:MI:SS [AM|PM] HH:MI:SS [AM|PM] YYYY-MM-DD MM/DD/YYYY HH:MI:SS [AM|PM] HH:MI:SS [AM|PM] MM/DD/YYYY Available Format for Strings in Date/Time Type ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ :func:`CAST` function allows the below format for date/time strings. **Available DATE String Format** :: [year sep] month sep day * 2011-04-20: April 20th, 2011 * 04-20: April 20th of this year If a separator (*sep*) is a slash (/), strings are recognized in the following order: :: month/day[/year] * 04/20/2011: April 20th, 2011 * 04/20: April 20th of this year If you do not use a separator (*sep*), strings are recognized in the following format. It is allowed to use 1, 2, and 4 digits for years and 1 and 2 digits for months. For day, you should always enter 2 digits. :: YYYYMMDD YYMMDD YMMDD MMDD MDD * 20110420: April 20th, 2011 * 110420: April 20th, 2011 * 420: April 20th of this year **Available TIME String Format** :: [hour]:min[:[sec]][.[msec]] [am|pm] * 09:10:15.359 am: 9 hours 10 minutes 15 seconds AM (0.359 seconds will be truncated) * 09:10:15: 9 hours 10 minutes 15 seconds AM * 09:10: 9 hours 10 minutes AM * \:10: 12 hours 10 minutes AM :: [[[[[[Y]Y]Y]Y]M]MDD]HHMISS[.[msec]] [am|pm] * 20110420091015.359 am: 9 hours 10 minutes 15 seconds AM * 0420091015: 9 hours 10 minutes 15 seconds AM :: [H]HMMSS[.[msec]] [am|pm] * 091015.359 am: 9 hours 10 minutes 15 seconds AM * 91015: 9 hours 10 minutes 15 seconds AM :: [M]MSS[.[msec]] [am|pm] * 1015.359 am: 12 hours 10 minutes 15 seconds AM * 1015: 12 hours 10 minutes 15 seconds AM :: [S]S[.[msec]] [am|pm] * 15.359 am: 12 hours 15 seconds AM * 15: 12 hours 15 seconds AM .. note:: : The [H]H format was allowed in CUBRID 2008 R3.1 and the earlier versions. That is, the string '10' was converted to **TIME** '10:00:00' in the R3.1 and the earlier versions, and will be converted to **TIME** '00:00:10' in version R4.0 and later. **Available DATETIME String Format** :: [year sep] month sep day [sep] [sep] hour [sep min[sep sec[.[msec]]]] * 04-20 09: April 20th of this year, 9 hours AM :: month/day[/year] [sep] hour [sep min [sep sec[.[msec]]]] * 04/20 09: April 20th of this year, 9 hours AM :: year sep month sep day sep hour [sep min[sep sec[.[msec]]]] * 2011-04-20 09: April 20th, 2011, 9 hours AM :: month/day/year sep hour [sep min[sep sec [.[msec]]]] * 04/20/2011 09: April 20th, 2011, 9 hours AM :: YYMMDDH (It is allowed only when time format is one digit.) * 1104209: April 20th, 2011, 9 hours AM :: YYMMDDHHMI[SS[.msec]] * 1104200910.359: April 20th, 2011, 9 hours 10 minutes AM (0.359 seconds will be truncated) * 110420091000.359: April 20th, 2011, 9 hours 10 minutes 0.359 seconds AM :: YYYYMMDDHHMISS[.msec] * 201104200910.359: November 4th, 2020 8 hours 9 minutes 10.359 seconds PM * 20110420091000.359: April 20th, 2011, 9 hours 10 minutes 0.359 seconds AM **Available Time-Date String Format** :: [hour]:min[:sec[.msec]] [am|pm] [year-]month-day * 09:10:15.359 am 2011-04-20: April 20th, 2011, 9 hours 10 minutes 15.359 seconds AM * \:10 04-20: April 20th of this year, 12 hours 10 minutes AM :: [hour]:min[:sec[.msec]] [am|pm] month/day[/[year]] * 09:10:15.359 am 04/20/2011: April 20th, 2011, 9 hours 10 minutes 15.359 seconds AM * \:10 04/20: April 20th of this year, 12 hours 10 minutes AM :: hour[:min[:sec[.[msec]]]] [am|pm] [year-]month-day * 09:10:15.359 am 04-20: April 20th of this year, 9 hours 10 minutes 15.359 seconds AM * 09 04-20: April 20th of this year, 9 hours AM :: hour[:min[:sec[.[msec]]]] [am|pm] month/day[/[year]] * 09:10:15.359 am 04/20: April 20th of this year, 9 hours 10 minutes, 15.359 seconds AM * 09 04/20: April 20th of this year, 9 hours AM **Rules** *msec* is a series of numbers representing milliseconds. The numbers after the fourth digit will be ignored. The rules for the separator string are as follows: * You should always use one colon (:) as a separator for the **TIME** separator. * **DATE** and **DATETIME** strings can be represented as a series of numbers without the separator sep), and non-alphanumeric characters can be used as separators. The **DATETIME** string can be divided into Time and Date with a space. * Separators should be identical in the input string. * For the Time-Date string, you can only use colon (:) for a Time separator and hyphen (-) or slash (/) for a Date separator. If you use a hyphen when entering date, you should enter like yyyy-mm-dd; in case of a slash, enter like mm/dd/yyyy. The following rules will be applied in the part of date. * You can omit the year as long as the syntax allows it. * If you enter the year as two digits, it represents the range from 1970-2069. That is, if YY<70, it is treated as 2000+YY; if YY>=70, it is treated as 1900+YY. If you enter one, three or four digit numbers for the year, the numbers will be represented as they are. * A space before and after a string and the string next to the space are ignored. The am/pm identifier for the **DATETIME** and **TIME** strings can be recognized as part of TIME value, but are not recognized as the am/pm identifier if non-space characters are added to it. The **TIMESTAMP** type of CUBRID consists of **DATE** type and **TIME** type, and **DATETIME** type consists of **DATE** type and **TIME** type with milliseconds being added to them. Input strings can include Date (**DATE** string), Time (**TIME** string), or both (**DATETIME** strings). You can convert a string including a specific type of data to another type, and the following rules will be applied for the conversion. * If you convert the **DATE** string to the **DATETIME** type, the time value will be '00:00:00.' * If you convert the **TIME** string to the **DATETIME** type, colon (:) is recognized as a date separator, so that the **TIME** string can be recognized as a date string and the time value will be '00:00:00.' * If you convert the **DATETIME** string to the **DATE** type, the time part will be ignored from the result but the time input value format should be valid. * You can covert the **DATETIME** string to the **TIME** type, and you must follow the following rules. * The date and time in the string must be divided by at least one blank. * The date part of the result value is ignored but the date input value format should be valid. * The year in the date part must be over 4 digits (available to start with 0) or the time part must include hours and minutes ([H]H:[M]M) at least. Otherwise the date pate are recognized as the TIME type of the [MM]SS format, and the following string will be ignored. * If the one of the units (year, month, date, hour, minute and second) of the **DATETIME** string is greater than 999999, it is not recognized as a number, so the string including the corresponding unit will be ignored. For example, in '2009-10-21 20:9943:10', an error occurs because the value in minutes is out of the range. However, if '2009-10-21 20:1000123:10' is entered,'2009' is recognized as the **TIME** type of the MMSS format, so that **TIME** '00:20:09' will be returned. * If you convert the time-date sting to the **TIME** type, the date part of the string is ignored but the date part format must be valid. * All input strings including the time part allow *[.msec]* on conversion, but only the **DATETIME** type can be maintained. If you convert this to a type such as **DATE**, **TIMESTAMP** or **TIME**, the *msec* value is discarded. * All conversions in the **DATETIME**, **TIME** string allow English locale following after time value or am/pm specifier written in the current locale of a server. .. code-block:: sql SELECT CAST('420' AS DATE); :: cast('420' as date) ====================== 04/20/2012 .. code-block:: sql SELECT CAST('91015' AS TIME); :: cast('91015' as time) ======================== 09:10:15 AM .. code-block:: sql SELECT CAST('110420091035.359' AS DATETIME); :: cast('110420091035.359' as datetime) ======================================= 09:10:35.359 AM 04/20/2011 .. code-block:: sql SELECT CAST('110420091035.359' AS TIMESTAMP); :: cast('110420091035.359' as timestamp) ======================================== 09:10:35 AM 04/20/2011 .. CUBRIDSUS-14182 .. _timezone-type: Date/Time Types with Timezone ============================= Date/Time types with timezone are date/time types which can be input or output by specifying timezone. There are two ways of specifying timezone; specifying the name of local zone and specifying the offset of time. Timezone information are considered in the Date/Time types if TZ or LTZ is followed after the existing Date/Time types; TZ means timezone, and LTZ means local timezone. * TZ type can be represented as WITH TIME ZONE. This stores UTC time and timezone information (decided by a user or session timezone) when this is created. TZ type requires 4 bytes more to store timezone information. * LTZ type can be represented as WITH LOCAL TIME ZONE. This stores UTC time internally; when this value is output, this is converted as a value of a local (current session) time zone. This table describes date/time types to compare date/time types with timezone together. UTC in the table means Coordinated Universal Time. +-----------+----------------+-------------------------+-----------------------------------+--------------------------------------------+-----------------------------------------------------------------+ | Category | Type | Input | Store | Output | Description | +===========+================+=========================+===================================+============================================+=================================================================+ | DATE | DATE | Without timezone | Input value | Absolute (the same as input) | Date | +-----------+----------------+-------------------------+-----------------------------------+--------------------------------------------+-----------------------------------------------------------------+ | DATETIME | DATETIME | Without timezone | Input value | Absolute (the same as input) | Date/time including milliseconds | | +----------------+-------------------------+-----------------------------------+--------------------------------------------+-----------------------------------------------------------------+ | | DATETIMETZ | With timezone | UTC + timezone(region or offset) | Absolute (keep input timezone) | Date/time + timezone | | +----------------+-------------------------+-----------------------------------+--------------------------------------------+-----------------------------------------------------------------+ | | DATETIMELTZ | With timezone | UTC | Relative (transformed by session timezone) | Date/time in the session timezone | +-----------+----------------+-------------------------+-----------------------------------+--------------------------------------------+-----------------------------------------------------------------+ | TIME | TIME | Without timezone | Input value | Absolute (the same as input) | Time | +-----------+----------------+-------------------------+-----------------------------------+--------------------------------------------+-----------------------------------------------------------------+ | TIMESTAMP | TIMESTAMP | Without timezone | UTC | Relative (transformed by session timezone) | Input value is translated as a session timezone's value. | | +----------------+-------------------------+-----------------------------------+--------------------------------------------+-----------------------------------------------------------------+ | | TIMESTAMPTZ | With timezone | UTC + timezone(region or offset) | Absolute (keep input timezone) | UTC + timestamp with timezone | | +----------------+-------------------------+-----------------------------------+--------------------------------------------+-----------------------------------------------------------------+ | | TIMESTAMPLTZ | With timezone | UTC | Relative (transformed by session timezone) | Session timezone. Same as TIMESTAMP's value, but | | | | | | | timezone specifier is output when this is printed out. | +-----------+----------------+-------------------------+-----------------------------------+--------------------------------------------+-----------------------------------------------------------------+ The other features of date/time types with timezone (e.g. maximum/minimum value, range, resolution) are the same with the features of general date/time types. .. note:: * On CUBRID, TIMESTAMP is stored as second unit, after Jan. 1, 1970 UTC (UNIX epoch). * Some DBMS's TIMESTAMP is similar to CUBRID's DATETIME as the respect of saving milliseconds. To see examples of functions using timezone types, see :doc:`function/datetime_fn`. The following shows that the output values are different among DATETIME, DATETIMETZ and DATETIMELTZ when session timezone is changed. .. code-block:: sql -- csql> ;set timezone="+09" CREATE TABLE tbl (a DATETIME, b DATETIMETZ, c DATETIMELTZ); INSERT INTO tbl VALUES (datetime'2015-02-24 12:30', datetimetz'2015-02-24 12:30', datetimeltz'2015-02-24 12:30'); SELECT * FROM tbl; :: 12:30:00.000 PM 02/24/2015 12:30:00.000 PM 02/24/2015 +09:00 12:30:00.000 PM 02/24/2015 +09:00 .. code-block:: sql -- csql> ;set timezone="+07" SELECT * FROM tbl; :: 12:30:00.000 PM 02/24/2015 12:30:00.000 PM 02/24/2015 +09:00 10:30:00.000 AM 02/24/2015 +07:00 The following shows that the output values are different among TIMESTAMP, TIMESTAMPTZ and TIMESTAMPLTZ when session timezone is changed. .. code-block:: sql -- ;set timezone="+09" CREATE TABLE tbl (a TIMESTAMP, b TIMESTAMPTZ, c TIMESTAMPLTZ); INSERT INTO tbl VALUES (timestamp'2015-02-24 12:30', timestamptz'2015-02-24 12:30', timestampltz'2015-02-24 12:30'); SELECT * FROM tbl; :: 12:30:00 PM 02/24/2015 12:30:00 PM 02/24/2015 +09:00 12:30:00 PM 02/24/2015 +09:00 .. code-block:: sql -- csql> ;set timezone="+07" SELECT * FROM tbl; :: 10:30:00 AM 02/24/2015 12:30:00 PM 02/24/2015 +09:00 10:30:00 AM 02/24/2015 +07:00 **Conversion from string to timestamp types** Conversion from string to timestamp/timestampltz/timestamptz are performed in context for creating timestamp objects from literals. +----------------------------+-----------------------------+----------------------------+------------------------------+ | From/to | Timestamp | Timestampltz | Timestamptz | +============================+=============================+============================+==============================+ | String (without timezone) | Interpret the date/time | Interpret the date/time | Interpret the date/time | | | parts in session timezone. | parts in session timezone. | parts in session timezone. | | | Convert to UTC, encode and | Convert to UTC, encode and | Convert to UTC, encode and | | | store the Unix epoch. | store the Unix epoch. | store the Unix epoch and | | | | | TZ_ID of session | +----------------------------+-----------------------------+----------------------------+------------------------------+ | String (with timezone) | Error (timezone part is not | Convert from value's | Convert from value's | | | supported for timestamp). | timezone to UTC. | timezone to UTC. | | | | Encode and store the Unix | Encode and store the Unix | | | | epoch. | epoch and TZ_ID of value's | | | | | timezone. | +----------------------------+-----------------------------+----------------------------+------------------------------+ **Conversion from string to datetime types** Conversion from string to datetime/datetimeltz/datetimetz are performed in context for creating datetime objects from literals. +----------------------------+-----------------------------+----------------------------+------------------------------+ | From/to | Datetime | Datetimeltz | Datetimetz | +============================+=============================+============================+==============================+ | String (without timezone) | Store the parsed values | Interpret the date/time | Interpret the date/time | | | from string. | parts in session timezone. | parts in session timezone. | | | | Convert to UTC and store | Convert to UTC and store the | | | | the new values. | new values and TZ_ID of | | | | | session | +----------------------------+-----------------------------+----------------------------+------------------------------+ | String (with timezone) | Error (timezone part is not | Convert from value's | Convert from value's | | | supported for datetime). | timezone to UTC. | timezone to UTC. | | | | Store the new values in | Store the new values in UTC | | | | UTC reference. | reference TZ_ID of | | | | | string's timezone. | +----------------------------+-----------------------------+----------------------------+------------------------------+ **Conversion of datetime and timestamp types to string (printing of values)** +----------------------------+-----------------------------+----------------------------+------------------------------+ | From/to | String (timezone printing | String (timezone force | String (no requirement for | | | not allowed) | print) | timezone - free choice) | +============================+=============================+============================+==============================+ | TIMESTAMP | Decode Unix epoch to | Decode Unix epoch to | Decode Unix epoch to session | | | session timezone and print | session timezone and print | timezone and print. | | | | with session timezone. | Do not print timezone string | +----------------------------+-----------------------------+----------------------------+------------------------------+ | TIMESTAMPLTZ | Decode Unix epoch to | Decode Unix epoch to | Decode Unix epoch to session | | | session timezone and print | session timezone and print | timezone and print. | | | | with session timezone. | Print session timezone. | +----------------------------+-----------------------------+----------------------------+------------------------------+ | TIMESTAMPTZ | Decode Unix epoch to | Decode Unix epoch to | Decode Unix epoch to | | | timezone from value and | timezone from value and | timezone from value and | | | print it. | print it; print timezone | print it; print timezone | | | | from value. | from value. | +----------------------------+-----------------------------+----------------------------+------------------------------+ | DATETIME | Print the stored values. | Print the stored value and | Print the stored value. | | | | session timezone. | Do not print any timezone. | +----------------------------+-----------------------------+----------------------------+------------------------------+ | DATETIMELTZ | Convert from UTC to session | Convert from UTC to | Convert from UTC to session | | | timezone and print the new | session timezone and print | timezone and print it. | | | value. | it. Print session timezone | Print session timezone. | +----------------------------+-----------------------------+----------------------------+------------------------------+ | DATETIMELTZ | Convert from UTC to value's | Convert from UTC to | Convert from UTC to value's | | | timezone and print the new | value's timezone and print | timezone and print it. | | | value. | it. Print value's timezone | Print value's timezone. | +----------------------------+-----------------------------+----------------------------+------------------------------+ Timezone Configuration ---------------------- The below shows the timezone related parameters configured in cubrid.conf. For parameter's configuration, see :ref:`cubrid-conf`. * **timezone** Specifies a timezone for a session. The default is a value of **server_timezone**. * **server_timezone** Specifies a timezone for a server. The default is a timezone of OS. * **tz_leap_second_support** Sets for support for leap second as yes or no. The default is no. Timezone Function ----------------- The following are timezone related functions. For each function's detail usage, click each function's name. * :func:`DBTIMEZONE` * :func:`SESSIONTIMEZONE` * :func:`FROM_TZ` * :func:`NEW_TIME` * :func:`TZ_OFFSET` Functions with a Timezone Type ------------------------------ All functions which use DATETIME, TIMESTAMP or TIME typed value in their input value, can use timezone typed value. The below is an example of using timezone typed values, it works the same as the case without timezone. Exceptionally, if the type name ends with LTZ, the output value of this type follows the local timezone's setting (timezone parameter). On the below example, the default unit of a number is millisecond, which is the minimum unit of DATETIME type. .. code-block:: sql SELECT datetimeltz '09/01/2009 03:30:30 pm' + 1; :: 03:30:30.001 PM 09/01/2009 Asia/Seoul .. code-block:: sql SELECT datetimeltz '09/01/2009 03:30:30 pm' - 1; :: 03:30:29.999 PM 09/01/2009 Asia/Seoul On the below example, the default unit of a number is second, which is the minimum unit of TIMESTAMP type. .. code-block:: sql SELECT timestamptz '09/01/2009 03:30:30 pm' + 1; :: 03:30:31 PM 09/01/2009 Asia/Seoul .. code-block:: sql SELECT timestamptz '09/01/2009 03:30:30 pm' - 1; :: 03:30:29 PM 09/01/2009 Asia/Seoul .. code-block:: sql SELECT EXTRACT (hour from datetimetz'10/15/1986 5:45:15.135 am Europe/Bucharest'); 5 A type which the name ends with LTZ follows the setting of local timezone. Therefore, if the value of timezone parameter is set to 'Asia/Seoul', EXTRACT function returns hour value of this timezone. .. code-block:: sql -- csql> ;set timezone='Asia/Seoul' SELECT EXTRACT (hour from datetimeltz'10/15/1986 5:45:15.135 am Europe/Bucharest'); :: 12 Conversion Functions for Timezone Types --------------------------------------- The following are functions converting a string to a date/time typed value, or date/time typed value to a string; The value can include an information like an offset, a zone and a daylight saving. * :func:`DATE_FORMAT` * :func:`STR_TO_DATE` * :func:`TO_CHAR` * :func:`TO_DATETIME_TZ` * :func:`TO_TIMESTAMP_TZ` For each function's usage, see the each function's explanation by clicking the function name. .. code-block:: sql SELECT DATE_FORMAT (datetimetz'2012-02-02 10:10:10 Europe/Zurich CET', '%TZR %TZD %TZH %TZM'); SELECT STR_TO_DATE ('2001-10-11 02:03:04 AM Europe/Bucharest EEST', '%Y-%m-%d %h:%i:%s %p %TZR %TZD'); SELECT TO_CHAR (datetimetz'2001-10-11 02:03:04 AM Europe/Bucharest EEST'); SELECT TO_DATETIME_TZ ('2001-10-11 02:03:04 AM Europe/Bucharest EEST'); SELECT TO_TIMESTAMP_TZ ('2001-10-11 02:03:04 AM Europe/Bucharest'); .. note:: :func:`TO_TIMESTAMP_TZ` and :func:`TO_DATETIME_TZ` functions do the same behaviors with :func:`TO_TIMESTAMP` and :func:`TO_DATETIME` functions except that they can have TZR, TZD, TZH and TZM information in their date/time argument. CUBRID uses the region name of timezone in the IANA(Internet Assigned Numbers Authority) timezone database region; for IANA timezone, see http://www.iana.org/time-zones. IANA Timezone ------------- In IANA(Internet Assigned Numbers Authority) timezone database, there are lots of codes and data which represent the history of localtime for many representative locations around the globe. This database is periodically updated to reflect changes made by political bodies to time zone boundaries, UTC offsets, and daylight-saving rules. Its management procedure is described in `BCP 175: Procedures for Maintaining the Time Zone Database `_. For more details, see http://www.iana.org/time-zones. CUBRID supports IANA timezone, and a user can use the IANA timezone library in the CUBRID installation package as it is. If you want to update as the recent timezone, update timezone first, compile timezone library, and restart the database. Regarding this, see :ref:`timezone-library`. Bit Strings =========== A bit string is a sequence of bits (1's and 0's). Images (bitmaps) displayed on the computer screen can be stored as bit strings. CUBRID supports the following two types of bit strings: * Fixed-length bit string (**BIT**) * Variable-length bit string (**BIT VARYING**) A bit string can be used as a method argument or an attribute type. Bit string literals are represented in a binary or hexadecimal format. For binary format, append the string consisting of 0's and 1's to the letter **B** or append a value to the **0b** as shown example below. :: B'1010' 0b1010 For hexadecimal format, append the string consisting of the numbers 0 - 9 and the letters A - F to the uppercase letter **X** or append a value to the **0x** . The following is hexadecimal representation of the same number that was represented above in binary format. :: X'a' 0xA The letters used in hexadecimal numbers are not case-sensitive. That is, X'4f' and X'4F' are considered as the same value. **Length** If a bit string is used in table attributes or method declarations, you must specify the maximum length. The maximum length for a bit string is 1,073,741,823 bits. **Bit String Coercion** Automatic coercion is performed between a fixed-length and a variable-length bit string for comparison. For explicit coercion, use the :func:`CAST` operator. BIT(n) ------ Fixed-length binary or hexadecimal bit strings are represented as **BIT** (*n*), where *n* is the maximum number of bits. If *n* is not specified, the length is set to 1. If *n* is not specified, the length is set to 1. The bit string is filled with 8-bit unit from the left side. For example, the value of B'1' is the same as the value of B'10000000'. Therefore, it is recommended to declare a length by 8-bit unit, and input a value by 8-bit unit. .. note:: If you input B'1' to the BIT(4) column, it is printed out X'8' on CSQL, X'80' on CUBRID Manager or application program. * *n* must be a number greater than 0. * If the length of the string exceeds *n*, it is truncated and filled with 0s. * If a bit string smaller than *n* is stored, the remainder of the string is filled with 0s. * **DEFAULT** constraint can be specified in a column of this type. .. code-block:: sql CREATE TABLE bit_tbl(a1 BIT, a2 BIT(1), a3 BIT(8), a4 BIT VARYING); INSERT INTO bit_tbl VALUES (B'1', B'1', B'1', B'1'); INSERT INTO bit_tbl VALUES (0b1, 0b1, 0b1, 0b1); INSERT INTO bit_tbl(a3,a4) VALUES (B'1010', B'1010'); INSERT INTO bit_tbl(a3,a4) VALUES (0xaa, 0xaa); SELECT * FROM bit_tbl; :: a1 a2 a3 a4 ========================================================================= X'8' X'8' X'80' X'8' X'8' X'8' X'80' X'8' NULL NULL X'a0' X'a' NULL NULL X'aa' X'aa' BIT VARYING(n) -------------- A variable-length bit string is represented as **BIT VARYING** (*n*), where *n* is the maximum number of bits. If *n* is not specified, the length is set to 1,073,741,823 (maximum value). *n* is the maximum number of bits. If *n* is not specified, the maximum length is set to 1,073,741,823. The bit string is filled with 8-bit values from the left side. For example, the value of B'1' is the same as the value of B'10000000'. Therefore, it is recommended to declare a length by 8-bit unit, and input a value by 8-bit unit. .. note:: If you input B'1' to the BIT VARYING(4) column, it is printed out X'8' on CSQL, X'80' on CUBRID Manager or application program. * If the length of the string exceeds *n*, it is truncated and filled with 0s. * The remainder of the string is not filled with 0s even if a bit string smaller than *n* is stored. * *n* must be a number greater than 0. * **DEFAULT** constraint can be specified in a column of this type. .. code-block:: sql CREATE TABLE bitvar_tbl(a1 BIT VARYING, a2 BIT VARYING(8)); INSERT INTO bitvar_tbl VALUES (B'1', B'1'); INSERT INTO bitvar_tbl VALUES (0b1010, 0b1010); INSERT INTO bitvar_tbl VALUES (0xaa, 0xaa); INSERT INTO bitvar_tbl(a1) VALUES (0xaaa); SELECT * FROM bitvar_tbl; :: a1 a2 ============================================ X'8' X'8' X'a' X'a' X'aa' X'aa' X'aaa' NULL .. code-block:: sql INSERT INTO bitvar_tbl(a2) VALUES (0xaaa); :: ERROR: Data overflow coercing X'aaa' to type bit varying. .. _char-data-type: Character Strings ================= CUBRID supports the following two types of character strings: * Fixed-length character string: **CHAR** (*n*) * Variable-length character string: **VARCHAR** (*n*) .. note:: From CUBRID 9.0 version, **NCHAR** and **NCHAR VARYING** is no more supported. Instead, please use **CHAR** and **VARCHAR**. The following are the rules that are applied when using the character string types. * In general, single quotations are used to enclose character string. Double quotations may be used as well depending on the value of **ansi_quotes**, which is a parameter related to SQL statement. If the **ansi_quotes** value is set to **no**, character string enclosed by double quotations is handled as character string, not as an identifier. The default value is **yes**. For details, :ref:`stmt-type-parameters`. * If there are characters that can be considered to be blank (e.g. spaces, tabs, or line breaks) between two character strings, these two character strings are treated as one according to ANSI standard. For example, the following example shows that a line break exists between two character strings. :: 'abc' 'def' The above two strings and the below string are considered identical. :: 'abcdef' * If you want to include a single quote as part of a character string, enter two single quotes in a row. For example, the character string on the left is stored as the one on the right. :: '''abcde''fghij' 'abcde'fghij * The maximum size of the token for all the character strings is 16 KB. * To enter the language of a specific country, we recommend that you to specify the locale when creating DB, then you can change locale by the introducer **CHARSET** (or **COLLATE** modifier). For more information, see :doc:`/sql/i18n`. **Length** Specify the number of a character string. When the length of the character string entered exceeds the length specified, the excess characters are truncated. For a fixed-length character string type such as **CHAR**, the length is fixed at the declared length. Therefore, the right part (trailing space) of the character string is filled with space characters when the string is stored. For a variable-length character string type such as **VARCHAR**, only the entered character string is stored, and the space is not filled with space characters. The maximum length of a **CHAR** or **VARCHAR** type to be specified is 1,073,741,823. Also, the maximum length that can be input or output in a CSQL statement is 8,192 KB. .. note:: In the CUBRID version less than 9.0, the length of **CHAR** or **VARCHAR** was not the number of characters, but the byte size. **Character Set, charset** A character set (charset) is a set in which rules are defined that relate to what kind of codes can be used for encoding when specified characters (symbols) are stored in the computer. The character used by CUBRID can be configured as the **CUBRID_CHARSET** environment variable. For details, see :doc:`/sql/i18n`. **Collating Character Sets** A collation is a set of rules used for comparing characters to search or sort values stored in the database when a certain character set is specified. For details, see :doc:`/sql/i18n`. **Character String Coercion** Automatic coercion takes place between a fixed-length and a variable-length character string for the comparison of two characters, applicable only to characters that belong to the same character set. For example, when you extract a column value from a **CHAR** (5) data type and insert it into a column with a **CHAR** (10) data type, the data type is automatically coerced to **CHAR** (10). If you want to coerce a character string explicitly, use the **CAST** operator (See :func:`CAST`). .. _string_compression: **String compression** Variable character type values (VARCHAR(n)) may be compressed (using LZO1X algorithm) before being stored in database (heap file, index file or list file). Compression is attempted if size in bytes is at least 255 bytes (this value is predefined and cannot be changed). If the compression is not efficient (compressed value size and its overhead is equal or greater than the original uncompressed value), the value is stored uncompressed. Compression is activated by default and may be disabled by setting the system parameter :ref:`enable_string_compression`. The overhead of compression is eight bytes : four for size of compressed buffer and four for the size of expected uncompressed string. Compressed strings are decompressed when they are read from database. To determine if a value is compressed or not, one may use the :ref:`DISK_SIZE` function result and compare it with the result of :ref:`OCTET_LENGTH` function on the same argument. A smaller value for DISK_SIZE (ignoring the value overhead) indicates that compression is used. CHAR(n) ------- A fixed-length character string is represented as **CHAR** *(n)*, in which *n* represents the number of characters. If *n* is not specified, the value is specified as 1, default value. When the length of a character string exceeds *n*, they are truncated. When character string which is shorter than *n* is stored, whitespace characters are used to fill up the trailing space. **CHAR** (*n*) and **CHARACTER** (*n*) are used interchangeably. .. note:: In the earlier versions of CUBRID 9.0, *n* represents bite length, not the number of characters. * *n* is an integer between 1 and 1,073,741,823 (1G). * Empty quotes (' ') are used to represent a blank string. In this case, the return value of the **LENGTH** function is not 0, but is the fixed length defined in **CHAR** (*n*). That is, if you enter a blank string into a column with **CHAR** (10), the **LENGTH** is 10; if you enter a blank value into a **CHAR** with no length specified, the **LENGTH** is the default value 1. * Space characters used as filling characters are considered to be smaller than any other characters, including special characters. :: If you specify 'pacesetter' as CHAR(12), 'pacesetter ' is stored (a 10-character string plus two whitespace characters). If you specify 'pacesetter ' as CHAR(10), 'pacesetter' is stored (a 10-character string; two whitespace characters are truncated). If you specify 'pacesetter' as CHAR(4), 'pace' is stored (truncated as the length of the character string is greater than 4). If you specify 'p ' as CHAR, 'p' is stored (if n is not specified, the length is set to the default value 1). * **DEFAULT** constraint can be specified in a column of this type. VARCHAR(n)/CHAR VARYING(n) -------------------------- Variable-length character strings are represented as **VARCHAR** (*n*), where *n* represents the number of characters. If *n* is not specified, the value is specified as 1,073,741,823, the maximum length. When the length of a character string exceeds *n*, they are truncated. When character string which is shorter than *n* is stored, whitespace characters are used to fill up the trailing space for **VARCHAR** (*n*), the length of string used are stored. **VARCHAR** (*n*), **CHARACTER, VARYING** (*n*), and **CHAR VARYING** (*n*) are used interchangeably. .. note:: In the earlier versions of CUBRID 9.0, *n* represents bite length, not the number of characters. * **STRING** is the same as the **VARCHAR** (maximum length). * *n* is an integer between 1 and 1,073,741,823 (1G). * Empty quotes (' ') are used to represent a blank string. In this case, the return value of the **LENGTH** function is not 0. :: If you specify 'pacesetter' as CHAR(4), 'pace' is stored (truncated as the length of the character string is greater than 4). If you specify 'pacesetter' as VARCHAR(12), 'pacesetter' is stored (a 10-character string). If you specify 'pacesetter ' as VARCHAR(12), 'pacesetter ' is stored (a 10-character string plus two whitespace characters). If you specify 'pacesetter ' as VARCHAR(10), 'pacesetter' is stored (a 10-character string; two whitespace characters are truncated). If you specify 'p ' as VARCHAR, 'p' is stored (if n is not specified, the default value 1,073,741,823 is used, and the trailing space is not filled with whitespace characters). * **DEFAULT** constraint can be specified in a column of this type. STRING ------ **STRING** is a variable-length character string data type. **STRING** is the same as the VARCHAR with the length specified as the maximum value. That is, **STRING** and **VARCHAR** (1,073,741,823) have the same value. .. _escape-characters: Escape Special Characters ------------------------- CUBRID supports two kinds of methods to escape special characters. One is using quotes and the other is using backslash (\\). * Escape with Quotes If you set **no** for the system parameter **ansi_quotes** in the **cubrid.conf** file, you can use both double quotes (") and singe quotes (') to wrap strings. The default value for the **ansi_quotes** parameter is **yes**, and you can use only single quotes to wrap the string. * You should use two single quotes ('') for the single quotes included in the strings wrapped in single quotes. * You should use two double quotes ("") for the double quotes included in the strings wrapped in double quotes. (when **ansi_quotes** = **no**) * You don't need to escape the single quotes included in the string wrapped in double quotes. (when **ansi_quotes** = **no**) * You don't need to escape the double quotes included in the string wrapped in single quotes. * Escape with Backslash You can use escape using backslash (\\) only if you set no for the system parameter **no_backslash_escapes** in the **cubrid.conf** file. The default value for the **no_backslash_escapes** parameter is **yes**. If the value of **no_backslash_escapes** is **no**, the following are the special characters. * \\' : Single quotes (') * \\" : Double quotes (") * \\n : Newline, linefeed character * \\r : Carriage return character * \\t : Tab character * \\\\ : Backslash * \\% : Percent sign (%). For details, see the following description. * \\_ : Underbar (\_). For details, see the following description. For all other escapes, the backslash will be ignored. For example, "\x" is the same as entering only "x". **\\%** and **\\_** are used in the pattern matching syntax such as **LIKE** to search percent signs and underbars and are used as a wildcard character if there is no backslash. Outside of the pattern matching syntax, "\\%"and "\\_" are recognized as normal strings not wildcard characters. For details, see :ref:`like-expr`. The following is the result of executing Escape if a value for the system parameter **ansi_quotes** in the **cubrid.conf** file is yes(default), and a value for **no_backslash_escapes** is no. .. code-block:: sql -- ansi_quotes=yes, no_backslash_escapes=no SELECT STRCMP('single quotes test('')', 'single quotes test(\')'); If you run the above query, backslash is regarded as an escape character. Therefore, above two strings are the same. :: strcmp('single quotes test('')', 'single quotes test('')') ============================================================= 0 .. code-block:: sql SELECT STRCMP('\a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z', 'a\bcdefghijklm\nopq\rs\tuvwxyz'); If you run the above query, backslash is regarded as an escape character. Therefore, above two strings are the same. :: strcmp('abcdefghijklm s uvwxyz', 'abcdefghijklm s uvwxyz') ===================================================================== 0 .. code-block:: sql SELECT LENGTH('\\'); If you run the above query, backslash is regarded as an escape character. Therefore, the length of above string is 1. :: char_length('\') =================== 1 The following is the result of executing Escape if a value for the system parameter **ansi_quotes** in the **cubrid.conf** file is yes(default), and a value for **no_backslash_escapes** is yes(default). Backslash character is regarded as a general character. .. code-block:: sql -- ansi_quotes=yes, no_backslash_escapes=yes SELECT STRCMP('single quotes test('')', 'single quotes test(\')'); If you run the above query, the quotation mark is regarded as opened, so the below error occurs. If you input this query on the CSQL interpreter's console, it waits the next quotation mark's input. :: ERROR: syntax error, unexpected UNTERMINATED_STRING, expecting SELECT or VALUE or VALUES or '(' .. code-block:: sql SELECT STRCMP('\a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z', 'a\bcdefghijklm\nopq\rs\tuvwxyz'); If you run the above query, backslash is regarded as a general character. Therefore, the result of the comparison between the above two strings shows different. :: strcmp('\a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z', 'a\bcdefghijklm\nopq\rs\tuvwxyz') =================================================================================================== -1 .. code-block:: sql SELECT LENGTH('\\'); If you run the above query, backslash is regarded as a general character. Therefore, the length of above string is 2. :: char_length('\\') ==================== 2 The following shows the result of executing Escape about the LIKE clause when **ansi_quotes** is yes and **no_backslash_escapes** is no. .. code-block:: sql -- ansi_quotes=yes, no_backslash_escapes=no CREATE TABLE t1 (a VARCHAR(200)); INSERT INTO t1 VALUES ('aaabbb'), ('aaa%'); SELECT a FROM t1 WHERE a LIKE 'aaa\%' ESCAPE '\\'; :: a ====================== 'aaa%' If you run above query, it returns only one row because '%' character is regarded as a general character. In the string of LIKE clause, backslash is always regarded as a general character. Therefore, if you want to make the '%' character as a general character, not as an pattern matching character, you should specify that '%' is an escape character by using ESCAPE clause. In the ESCAPE clause, backslash is regarded as an escape character. Therefore, we used two backslashes. If you want use other character than a backslash as an escape character, you can write the query as follows. .. code-block:: sql SELECT a FROM t1 WHERE a LIKE 'aaa#%' ESCAPE '#'; ENUM Data Type ============== The **ENUM** type is a data type consisting of an ordered set of distinct constant char literals called enum values. The syntax for creating an enum column is:: : ENUM '(' ')' : ',' CHAR_STRING | CHAR_STRING The following example shows the definition of an **ENUM** column. .. code-block:: sql CREATE TABLE tbl ( color ENUM ('red', 'yellow', 'blue', 'green') ); * **DEFAULT** constraint can be specified in a column of this type. An index is associated to each element of the enum set, according to the order in which elements are defined in the enum type. For example, the *color* column can have one of the following values (assuming that the column allows NULL values) : ========= ============ Value Index Number ========= ============ NULL NULL 'red' 1 'yellow' 2 'blue' 3 'green' 4 ========= ============ The set of values of an **ENUM** type must not exceed 512 elements and each element of the set must be unique. CUBRID allocates two bytes of storage for each **ENUM** type value because it only stores the index of each value. This reduces the storage space needed which may improve performance. Either the enum value or the value index can be used when working with **ENUM** types. For example, to insert values into an **ENUM** type column, users can use either the value or the index of the **ENUM** type: .. code-block:: sql -- insert enum element 'yellow' with index 2 INSERT INTO tbl (color) VALUES ('yellow'); -- insert enum element 'red' with index 1 INSERT INTO tbl (color) VALUES (1); When used in expressions, the **ENUM** type behaves either as a **CHAR** type or as a number, depending on the context in which it is used: .. code-block:: sql -- the first result column has ENUM type, the second has INTEGER type and the third has VARCHAR type SELECT color, color + 0, CONCAT(color, '') FROM tbl; :: color color+0 concat(color, '') ========================================================= 'yellow' 2 'yellow' 'red' 1 'red' When used in type contexts other than **CHAR** or numbers, the enum is coerced to that type using either the index or the enum value. The table below shows which part of an **ENUM** type is used in the coercion: +---------------+-------------------------+ | Type | Enum type (Index/Value) | +===============+=========================+ | SHORT | Index | +---------------+-------------------------+ | INTEGER | Index | +---------------+-------------------------+ | BIGINT | Index | +---------------+-------------------------+ | FLOAT | Index | +---------------+-------------------------+ | DOUBLE | Index | +---------------+-------------------------+ | NUMERIC | Index | +---------------+-------------------------+ | TIME | Value | +---------------+-------------------------+ | DATE | Value | +---------------+-------------------------+ | DATETIME | Value | +---------------+-------------------------+ | TIMESTAMP | Value | +---------------+-------------------------+ | CHAR | Value | +---------------+-------------------------+ | VARCHAR | Value | +---------------+-------------------------+ | BIT | Value | +---------------+-------------------------+ | VARBIT | Value | +---------------+-------------------------+ ENUM Type Comparisons ----------------------- When used in **=** or **IN** predicates of the form ( ), CUBRID tries to convert the constant to the **ENUM** type. If the coercion fails, CUBRID does not return an error but considers the comparison to be false. This is implemented like this in order to allow index scan plans to be generated on these two operators. For all other :doc:`comparison operators`, the **ENUM** type is converted to the type of the other operand. If a comparison is performed on two **ENUM** types, both arguments are converted to **CHAR** type and the comparison follows **CHAR** type rules. Except for **=** and **IN**, predicates on **ENUM** columns cannot be used in index scan plans. To understand these rules, consider the following table: .. code-block:: sql CREATE TABLE tbl ( color ENUM ('red', 'yellow', 'blue', 'green') ); INSERT INTO tbl (color) VALUES (1), (2), (3), (4); The following query will convert the constant 'red' to the enum value 'red' with index 1 .. code-block:: sql SELECT color FROM tbl WHERE color = 'red'; :: color ====================== 'red' .. code-block:: sql SELECT color FROM tbl WHERE color = 1; :: color ====================== 'red' The following queries will not return a conversion error but will not return any results: .. code-block:: sql SELECT color FROM tbl WHERE color = date'2010-01-01'; SELECT color FROM tbl WHERE color = 15; SELECT color FROM tbl WHERE color = 'asdf'; In the following queries the **ENUM** type will be converted to the type of the other operand: .. code-block:: sql -- CHAR comparison using the enum value SELECT color FROM tbl WHERE color < 'pink'; :: color ====================== 'blue' 'green' .. code-block:: sql -- INTEGER comparison using the enum index SELECT color FROM tbl WHERE color > 3; :: color ====================== 'green' .. code-block:: sql -- Conversion error SELECT color FROM tbl WHERE color > date'2012-01-01'; :: ERROR: Cannot coerce value of domain "enum" to domain "date". ENUM Type Ordering ------------------ Values of the **ENUM** type are ordered by value index, not by enum value. When defining a column with **ENUM** type, users also define the ordering of the enum values. .. code-block:: sql SELECT color FROM tbl ORDER BY color ASC; :: color ====================== 'red' 'yellow' 'blue' 'green' To order the values stored in an **ENUM** type column as **CHAR** values, users can cast the enum value to the **CHAR** type: .. code-block:: sql SELECT color FROM tbl ORDER BY CAST (color AS VARCHAR) ASC; :: color ====================== 'blue' 'green' 'red' 'yellow' Notes ----- The **ENUM** type is not a reusable type. If several columns require the same set of values, an **ENUM** type must be defined for each one. When comparing two columns of **ENUM** type, the comparison is performed as if the columns were coerced to **CHAR** type even if the two **ENUM** types define the same set of values. Using the **ALTER ... CHANGE** statement to modify the set of values of an **ENUM** type is only allowed if the value of the system parameter **alter_table_change_type_strict** is set to yes. In this case, CUBRID uses enum value (the char-literal) to convert values to the new domain. If a value is outside of the new **ENUM** type values set, it is automatically mapped to the empty string(''). .. code-block:: sql CREATE TABLE tbl(color ENUM ('red', 'green', 'blue')); INSERT INTO tbl VALUES('red'), ('green'), ('blue'); The following statement will extend the **ENUM** type with the value 'yellow': .. code-block:: sql ALTER TABLE tbl CHANGE color color ENUM ('red', 'green', 'blue', 'yellow'); INSERT into tbl VALUES(4); SELECT color FROM tbl; :: color ====================== 'red' 'green' 'blue' 'yellow' The following statement will change all tuples with value 'green' to value 'red' because the value 'green' cannot be converted the new **ENUM** type: .. code-block:: sql ALTER TABLE tbl CHANGE color color enum ('red', 'yellow', 'blue'); SELECT color FROM tbl; :: color ====================== 'red' '' 'blue' 'yellow' The **ENUM** type is mapped to char-string types in CUBRID drivers. The following example shows how to use the **ENUM** type in a JDBC application: .. code-block:: java Statement stmt = connection.createStatement("SELECT color FROM tbl"); ResultSet rs = stmt.executeQuery(); while(rs.next()) { System.out.println(rs.getString()); } The following example shows how to use the **ENUM** type in a CCI application. .. code-block:: c req_id = cci_prepare (conn, "SELECT color FROM tbl", 0, &err); error = cci_execute (req_id, 0, 0, &err); if (error < CCI_ER_NO_ERROR) { /* handle error */ } error = cci_cursor (req_id, 1, CCI_CURSOR_CURRENT, &err); if (error < CCI_ER_NO_ERROR) { /* handle error */ } error = cci_fetch (req_id, &err); if (error < CCI_ER_NO_ERROR) { /* handle error */ } cci_get_data (req, idx, CCI_A_TYPE_STR, &data, 1); .. _blob-clob: BLOB/CLOB Data Types ==================== An External **LOB** type is data to process Large Object, such as text or images. When LOB-type data is created and inserted, it will be stored in a file to an external storage, and the location information of the relevant file (**LOB** Locator) will be stored in the CUBRID database. If the **LOB** Locator is deleted from the database, the relevant file that was stored in the external storage will be deleted as well. CUBRID supports the following two types of **LOB** : * Binary Large Object (**BLOB**) * Character Large Object (**CLOB**) .. note:: **Terminologies** * **LOB** (Large Object): Large-sized objects such as binaries or text. * **FBO** (File Based Object): An object that stores data of the database in an external file. * **External LOB**\ : An object better known as FBO, which stores **LOB** data in a file into an external DB. It is supported by CUBRID. Internal **LOB** is an object that stores **LOB** data inside the DB. * **External Storage**\ : An external storage to store LOB (example : POSIX file system). * **LOB Locator**\ : The path name of a file stored in external storage. * **LOB Data**\ : Details of a file in a specific location of LOB Locator. When storing LOB data in external storage, the following naming convention will be applied: :: {table_name}_{unique_name} * *table_name* : It is inserted as a prefix and able to store the **LOB** data of many tables in one external storage. * *unique_name* : The random name created by the DB server. **LOB** data is stored in the local file system of the DB server. LOB data is stored in the path specified in the **-lob-base-path option** value of **cubrid createdb**; if this value is omitted, the data will be stored in the [db-vol path]/lob path where the database volume will be created. For more details, see :ref:`creating-database` and :ref:`lob-storage`. If a user change any **LOB** file without using CUBRID API or CUBRID tools, data consistency is not guaranteed. If a **LOB** data file path that was registered to the database directory file(**databases.txt**) is deleted, please note that database server (**cub_server**) and standalone utilities will not correctly work. BLOB ---- A type that stores binary data outside the database. The maximum length of **BLOB** data is the maximum file size creatable in an external storage. In SQL statements, the **BLOB** type expresses the input and output value in a bit string. That is, it is compatible with the **BIT** (n) and **BIT VARYING** (n) types, and only an explicit type change is allowed. If data lengths differ from one another, the maximum length is truncated to fit the smaller one. When converting the **BLOB** type value to a binary value, the length of the converted data cannot exceed 1GB. When converting binary data to the **BLOB** type, the size of the converted data cannot exceed the maximum file size provided by the **BLOB** storage. CLOB ---- A type that stores character string data outside the database. The maximum length of **CLOB** data is the maximum file size creatable in an external storage. In SQL statements, the CLOB type expresses the input and output value in a character string. That is, it is compatible with the **CHAR** (n), **VARCHAR** (n) types. However, only an explicit type change is allowed, and if data lengths are different from one another, the maximum length is truncated to fit to the smaller one. When converting the **CLOB** type value to a character string, the length of the converted data cannot exceed 1 GB. When converting a character string to the **CLOB** type, the size of the converted data cannot exceed the maximum file size provided by the **CLOB** storage. To Create and alter LOB ----------------------- **BLOB** / **CLOB** type columns can be created/added/deleted by using a **CREATE TABLE** statement or an **ALTER TABLE** statement. * You cannot create the index file for a **LOB** type column. * You cannot define the **PRIMARY KEY**, **FOREIGN KEY**, **UNIQUE**, **NOT NULL** constraints for a **LOB** type column. However, **SHARED** property cannot be defined and **DEFAULT** property can only be defined by the **NULL** value. * **LOB** type column/data cannot be the element of collection type. * If you are deleting a record containing a **LOB** type column, all files located inside a **LOB** column value (Locator) and the external storage will be deleted. When a record containing a LOB type column is deleted in a basic key table, and a record of a foreign key table that refers to the foregoing details is deleted at once, all **LOB** files located in a **LOB** column value (Locator) and the external storage will be deleted. However, if the relevant table is deleted by using a **DROP TABLE** statement, or a **LOB** column is deleted by using an **ALTER TABLE...DROP** statement, only a **LOB** column value (**LOB** Locator) is deleted, and the **LOB** files inside the external storage which a **LOB** column refers to will not be deleted. .. code-block:: sql -- creating a table and CLOB column CREATE TABLE doc_t (doc_id VARCHAR(64) PRIMARY KEY, content CLOB); -- an error occurs when UNIQUE constraint is defined on CLOB column ALTER TABLE doc_t ADD CONSTRAINT content_unique UNIQUE(content); -- an error occurs when creating an index on CLOB column CREATE INDEX i_doc_t_content ON doc_t (content); -- creating a table and BLOB column CREATE TABLE image_t (image_id VARCHAR(36) PRIMARY KEY, doc_id VARCHAR(64) NOT NULL, image BLOB); -- an error occurs when adding a BOLB column with NOT NULL constraint ALTER TABLE image_t ADD COLUMN thumbnail BLOB NOT NULL; -- an error occurs when adding a BLOB column with DEFAULT attribute ALTER TABLE image_t ADD COLUMN thumbnail2 BLOB DEFAULT BIT_TO_BLOB(X'010101'); To store and update LOB ----------------------- In a **BLOB** / **CLOB** type column, each **BLOB** / **CLOB** type value is stored, and if binary or character string data is input, you must explicitly change the types by using each :func:`BIT_TO_BLOB` and :func:`CHAR_TO_CLOB` function. If a value is input in a **LOB** column by using an **INSERT** statement, a file is created in an external storage internally and the relevant data is stored; the relevant file path (Locator) is stored in an actual column value. If a record containing a **LOB** column uses a **DELETE** statement, a file to which the relevant **LOB** column refers will be deleted simultaneously. If a **LOB** column value is changed using an **UPDATE** statement, the column value will be changed following the operation below, according to whether a new value is **NULL** or not. * If a **LOB** type column value is changed to a value that is not **NULL** : If a Locator that refers to an external file is already available in a **LOB** column, the relevant file will be deleted. A new file is created afterwards. After storing a value that is not **NULL**, a Locator for a new file will be stored in a **LOB** column value. * If changing a **LOB** type column value to **NULL** : If a Locator that refers to an external file is already available in a **LOB** column, the relevant file will be deleted. And then **NULL** is stored in a **LOB** column value. .. code-block:: sql -- inserting data after explicit type conversion into CLOB type column INSERT INTO doc_t (doc_id, content) VALUES ('doc-1', CHAR_TO_CLOB('This is a Dog')); INSERT INTO doc_t (doc_id, content) VALUES ('doc-2', CHAR_TO_CLOB('This is a Cat')); -- inserting data after explicit type conversion into BLOB type column INSERT INTO image_t VALUES ('image-0', 'doc-0', BIT_TO_BLOB(X'000001')); INSERT INTO image_t VALUES ('image-1', 'doc-1', BIT_TO_BLOB(X'000010')); INSERT INTO image_t VALUES ('image-2', 'doc-2', BIT_TO_BLOB(X'000100')); -- inserting data from a sub-query result INSERT INTO image_t SELECT 'image-1010', 'doc-1010', image FROM image_t WHERE image_id = 'image-0'; -- updating CLOB column value to NULL UPDATE doc_t SET content = NULL WHERE doc_id = 'doc-1'; -- updating CLOB column value UPDATE doc_t SET content = CHAR_TO_CLOB('This is a Dog') WHERE doc_id = 'doc-1'; -- updating BLOB column value UPDATE image_t SET image = (SELECT image FROM image_t WHERE image_id = 'image-0') WHERE image_id = 'image-1'; -- deleting BLOB column value and its referencing files DELETE FROM image_t WHERE image_id = 'image-1010'; To access LOB ------------- When you get a **LOB** type column, the data stored in a file to which the column refers will be displayed. You can execute an explicit type change by using :func:`CAST` operator, :func:`CLOB_TO_CHAR` and :func:`BLOB_TO_BIT` function. * If the query is executed in CSQL, a column value (Locator) will be displayed, instead of the data stored in a file. To display the data to which a **BLOB** / **CLOB** column refers, it must be changed to strings by :func:`CLOB_TO_CHAR` function. * To use the string process function, the strings need to be converted by :func:`CLOB_TO_CHAR` function. * You cannot specify a **LOB** column in ** GROUP BY** clause and **ORDER BY** clause. * Comparison operators, relational operators, **IN**, **NOT IN** operators cannot be used to compare **LOB** columns. However, **IS NULL** expression can be used to compare whether it is a **LOB** column value (Locator) or **NULL**. This means that **TRUE** will be returned when a column value is **NULL**, and if a column value is **NULL**, there is no file to store **LOB** data. * When a **LOB** column is created, and the file is deleted after data input, a **LOB** column value (Locator) will become a state that is referring to an invalid file. As such, using :func:`CLOB_TO_CHAR`, :func:`BLOB_TO_BIT`, :func:`CLOB_LENGTH` and :func:`BLOB_LENGTH` functions on the columns that have mismatching **LOB** Locator and a **LOB** data file enables them to display **NULL**. .. code-block:: sql -- displaying locator value when selecting CLOB and BLOB column in CSQL interpreter SELECT doc_t.doc_id, content, image FROM doc_t, image_t WHERE doc_t.doc_id = image_t.doc_id; :: doc_id content image ================================================================== 'doc-1' file:/home1/data1/ces_658/doc_t.00001282208855807171_7329 file:/home1/data1/ces_318/image_t.00001282208855809474_7474 'doc-2' file:/home1/data1/ces_180/doc_t.00001282208854194135_5598 file:/home1/data1/ces_519/image_t.00001282208854205773_1215 2 rows selected. .. code-block:: sql -- using string functions after coercing its type by CLOB_TO_CHAR( ) SELECT CLOB_TO_CHAR(content), SUBSTRING(CLOB_TO_CHAR(content), 10) FROM doc_t; :: clob_to_char(content) substring( clob_to_char(content) from 10) ============================================ 'This is a Dog' ' Dog' 'This is a Cat' ' Cat' 2 rows selected. .. code-block:: sql SELECT CLOB_TO_CHAR(content) FROM doc_t WHERE CLOB_TO_CHAR(content) LIKE '%Dog%'; :: clob_to_char(content) ====================== 'This is a Dog' .. code-block:: sql SELECT CLOB_TO_CHAR(content) FROM doc_t ORDER BY CLOB_TO_CHAR(content); :: clob_to_char(content) ====================== 'This is a Cat' 'This is a Dog' .. code-block:: sql SELECT * FROM doc_t WHERE content LIKE 'This%'; :: doc_id content ============================================ 'doc-1' file:/home1/data1/ces_004/doc_t.00001366272829040346_0773 'doc-2' file:/home1/data1/ces_256/doc_t.00001366272815153996_1229 .. code-block:: sql -- an error occurs when LOB column specified in ORDER BY/GROUP BY clauses SELECT * FROM doc_t ORDER BY content; :: ERROR: doc_t.content can not be an ORDER BY column Functions and Operators for LOB ------------------------------- You can explicitly cast bit/string type to **BLOB**/**CLOB** type and **BLOB**/**CLOB** type to bit/string type with :func:`CAST` operator. For more details, see :func:`CAST` operator. :: CAST ( AS { BLOB | CLOB }) CAST ( AS { BLOB | CLOB }) These are the functions for BLOB/CLOB types. For more details, refer :doc:`/sql/function/lob_fn`. * :func:`CLOB_TO_CHAR` * :func:`BLOB_TO_BIT` * :func:`CHAR_TO_CLOB` * :func:`BIT_TO_BLOB` * :func:`CHAR_TO_BLOB` * :func:`CLOB_FROM_FILE` * :func:`BLOB_FROM_FILE` * :func:`CLOB_LENGTH` * :func:`BLOB_LENGTH` .. note:: " <*blob_or_clob_column* **IS NULL** ": using **IS NULL** condition, it compares the value of **LOB** column(Locator) if it's **NULL** or not. If it's **NULL**, this condition returns **TRUE**. .. _lob-storage: To create and manage LOB storage -------------------------------- By default, the **LOB** data file is stored in the /lob directory where database volume is created. However, if the lob base path is specified with :option:`createdb -B` option when creating the database, **LOB** data files will be stored in the directory designated. However, if the specified directory does not exist, CUBRID tries to create the directory and display an error message when it fails to create it. For more details, see :option:`createdb -B` option. :: # image_db volume is created in the current work directory, and a LOB data file will be stored. % cubrid createdb image_db en_US # LOB data file is stored in the "/home1/data1" path within a local file system. % cubrid createdb --lob-base-path="file:/home1/data1" image_db en_US You can identify a directory where a LOB file will be stored by executing the cubrid spacedb utility. :: % cubrid spacedb image_db Space description for database 'image_db' with pagesize 16.0K. (log pagesize: 16.0K) Volid Purpose total_size free_size Vol Name 0 GENERIC 512.0M 510.1M /home1/data1/image_db Space description for temporary volumes for database 'image_db' with pagesize 16.0K. Volid Purpose total_size free_size Vol Name LOB space description file:/home1/data1 To expand or change the **lob-base-path** of the database, change its **lob-base-path** of **databases.txt** file. Restart the database server to apply the changes made to **databases.txt**. However, even if you change the **lob-base-path** of **databases.txt**, access to the **LOB** data stored in a previous storage is possible. :: # You can change to a new directory from the lob-base-path of databases.txt file. % cat $CUBRID_DATABASES/databases.txt #db-name vol-path db-host log-path lob-base-path image_db /home1/data1 localhost /home1/data1 file:/home1/data2 Backup/recovery for data files of **LOB** type columns are not supported, while those for meta data(Locator) are supported. If you are copying a database by using :program:`copydb` utility, you must configure the **databases.txt** additionally, as the **LOB** file directory path will not be copied if the related option is not specified. For more details, see the :option:`copydb -B` and :option:`copydb --copy-lob-path` options. Transaction and Recovery ------------------------ Commit/Rollback for **LOB** data changes are supported. That is, it ensures the validation of mapping between **LOB** Locator and actual **LOB** data within transactions, and it supports recovery during DB errors. This means that an error will be displayed in case of mapping errors between **LOB** Locator and **LOB** data due to the rollback of the relevant transactions, as the database is terminated during transactions. See the example below. .. code-block:: sql -- csql> ;AUTOCOMMIT OFF CREATE TABLE doc_t (doc_id VARCHAR(64) PRIMARY KEY, content CLOB); INSERT INTO doc_t VALUES ('doc-10', CHAR_TO_CLOB('This is content')); COMMIT; UPDATE doc_t SET content = CHAR_TO_CLOB('This is content 2') WHERE doc_id = 'doc-10'; ROLLBACK; SELECT doc_id, CLOB_TO_CHAR(content) FROM doc_t WHERE doc_id = 'doc-10'; :: doc_id content ========================================================= 'doc-10' 'This is content' .. code-block:: sql -- csql> ;AUTOCOMMIT OFF INSERT INTO doc_t VALUES ('doc-11', CHAR_TO_CLOB ('This is content')); COMMIT; UPDATE doc_t SET content = CHAR_TO_CLOB('This is content 3') WHERE doc_id = 'doc-11'; -- system crash occurred and then restart server SELECT doc_id, CLOB_TO_CHAR(content) FROM doc_t WHERE doc_id = 'doc-11'; :: -- Error : LOB Locator references to the previous LOB data because only LOB Locator is rollbacked. .. note:: * When selecting **LOB** data in an application through a driver such as JDBC, the driver can get **ResultSet** from DB server and fetch the record while changing the cursor location on **Resultset**. That is, only Locator, the meta data of a **LOB** column, is stored at the time when **ResultSet** is imported, and **LOB** data that is referred by a File Locator will be fetched from the file Locator at the time when a record is fetched. Therefore, if **LOB** data is updated between two different points of time, there could be an error, as the mapping of **LOB** Locator and actual **LOB** data will be invalid. * Since backup/recovery is supported only for meta data (Locator) of the **LOB** type columns, an error is likely to occur, as the mapping of **LOB** Locator and LOB data is invalid if recovery is performed based on a specific point of time. * TO execute **INSERT** the **LOB** data into other device, LOB data referred by the meta data (Locator) of a **LOB** column must be read. * In a CUBRID HA environment, the meta data (Locator) of a **LOB** column is replicated and data of a **LOB** type is not replicated. Therefore, if storage of a **LOB** type is located on the local machine, no tasks on the columns in a slave node or a master node after failover are allowed. .. warning:: Up to CUBRID 2008 R3.0, Large Objects are processed by using **glo** (Generalized Large Object) classes. However, the **glo** classes has been deprecated since the CUBRID 2008 R3.1. Instead of it, **LOB** / **CLOB** data type is supported. Therefore, both DB schema and application must be modified when upgrading CUBRID in an environment using the previous version of **glo** classes. .. _collection-data-type: Collection Types ================ Allowing multiple data values to be stored in a single attribute is an extended feature of relational database. Each element of a collection is possible to have different data type each other except View. Rest types except BLOB and CLOB can be an element of collection types. +--------------+---------------------------------------+------------------------------------+----------------------------+----------------------------+ | Type | Description | Definition | Input Data | Stored Data | +==============+=======================================+====================================+============================+============================+ | **SET** | A union which does not allow | col_name SET VARCHAR(20) or | {'c','c','c','b','b','a'} | {'a','b','c'} | | | duplicates | col_name SET (VARCHAR(20)) | | | +--------------+---------------------------------------+------------------------------------+----------------------------+----------------------------+ | **MULTISET** | A union which allows | col_name MULTISET VARCHAR(20) or | {'c','c','c','b','b','a'} | {'a','b','b','c','c','c'} | | | duplicates | col_name MULTISET (VARCHAR(20)) | | | +--------------+---------------------------------------+------------------------------------+----------------------------+----------------------------+ | **LIST** or | A union which allows duplicates | col_name LIST VARCHAR(20) or | {'c','c','c','b','b','a'} | {'c','c','c','b','b','a'} | | **SEQUENCE** | and stores data in the order of input | col_name LIST (VARCHAR(20)) | | | +--------------+---------------------------------------+------------------------------------+----------------------------+----------------------------+ As you see the table above, the value specified as a collection type can be inputted with curly braces ('{', '}') each value is separated with a comma (,). If the specified collection types are identical, the collection types can be cast explicitly by using the **CAST** operator. The following table shows the collection types that allow explicit coercions. +--------------+-----+----------+------+ | FROM \\ TO | SET | MULTISET | LIST | +==============+=====+==========+======+ | **SET** | \- | Yes | Yes | +--------------+-----+----------+------+ | **MULTISET** | Yes | \- | No | +--------------+-----+----------+------+ | **LIST** | Yes | Yes | \- | +--------------+-----+----------+------+ Collection Types do not support collations. Therefore, Below query returns error. .. code-block:: sql CREATE TABLE tbl (str SET (string) COLLATE utf8_en_ci); :: Syntax error: unexpected 'COLLATE', expecting ',' or ')' SET --- **SET** is a collection type in which each element has different values. Elements of a **SET** are allowed to have only one data type. It can have records of other tables. .. code-block:: sql CREATE TABLE set_tbl (col_1 SET (CHAR(1))); INSERT INTO set_tbl VALUES ({'c','c','c','b','b','a'}); INSERT INTO set_tbl VALUES ({NULL}); INSERT INTO set_tbl VALUES ({''}); SELECT * FROM set_tbl; :: col_1 ====================== {'a', 'b', 'c'} {NULL} {' '} .. code-block:: sql SELECT CAST (col_1 AS MULTISET), CAST (col_1 AS LIST) FROM set_tbl; :: cast(col_1 as multiset) cast(col_1 as sequence) ============================================ {'a', 'b', 'c'} {'a', 'b', 'c'} {NULL} {NULL} {' '} {' '} .. code-block:: sql INSERT INTO set_tbl VALUES (''); :: ERROR: Casting '' to type set is not supported. MULTISET -------- **MULTISET** is a collection type in which duplicated elements are allowed. Elements of a **MULTISET** are allowed to have only one data type. It can have records of other tables. .. code-block:: sql CREATE TABLE multiset_tbl (col_1 MULTISET (CHAR(1))); INSERT INTO multiset_tbl VALUES ({'c','c','c','b','b', 'a'}); SELECT * FROM multiset_tbl; :: col_1 ====================== {'a', 'b', 'b', 'c', 'c', 'c'} .. code-block:: sql SELECT CAST(col_1 AS SET), CAST(col_1 AS LIST) FROM multiset_tbl; :: cast(col_1 as set) cast(col_1 as sequence) ============================================ {'a', 'b', 'c'} {'c', 'c', 'c', 'b', 'b', 'a'} LIST/SEQUENCE ------------- **LIST** (= **SEQUENCE**) is a collection type in which the input order of elements is preserved, and duplications are allowed. Elements of a **LIST** are allowed to have only one data type. It can have records of other tables. .. code-block:: sql CREATE TABLE list_tbl (col_1 LIST (CHAR(1))); INSERT INTO list_tbl VALUES ({'c','c','c','b','b', 'a'}); SELECT * FROM list_tbl; :: col_1 ====================== {'c', 'c', 'c', 'b', 'b', 'a'} .. code-block:: sql SELECT CAST(col_1 AS SET), CAST(col_1 AS MULTISET) FROM list_tbl; :: cast(col_1 as set) cast(col_1 as multiset) ============================================ {'a', 'b', 'c'} {'a', 'b', 'b', 'c', 'c', 'c'} .. _implicit-type-conversion: Implicit Type Conversion ======================== An implicit type conversion represents an automatic conversion of a type of expression to a corresponding type. **SET**, **MULTISET**, **LIST** and **SEQUENCE** should be converted explicitly. If you convert the **DATETIME** and the **TIMESTAMP** types (including types having timezone) to the **DATE** type or the **TIME** type, data loss may occur. If you convert the **DATE** type to the **DATETIME** type or the **TIMESTAMP** type (or types with timezone), the time will be set to '12:00:00 AM.' Timezone part of values with timezone types has only a reference purpose, their absolute value is stored as UTC reference. When converting from a value of type with timezone to a type without timezone, a conversion is operated as if session timezone is used. When converting from a value of type without timezone to a type with timezone, the conversion takes place considering the session timezone. For more details on converting to/from value with timezone type see :ref:`date-time-type`. If you convert a string type or an exact numeric type to a floating-point numeric type, the value may not be accurate. Because a string type and an exact type use a decimal precision to represent the value, but a floating-point numeric type uses a binary precision. The implicit type conversion executed by CUBRID is as follows: **Implicit Type Conversion Table 1** +------------------+--------------+--------------+--------------+----------+----------+---------------+---------------+---------------+ | From \\ To | DATETIME | DATETIMELTZ | DATETIMETZ | DATE | TIME | TIMESTAMP | TIMESTAMPLTZ | TIMESTAMPTZ | +==================+==============+==============+==============+==========+==========+===============+===============+===============+ | **DATETIME** | \- | O | O | O | O | O | O | O | +------------------+--------------+--------------+--------------+----------+----------+---------------+---------------+---------------+ | **DATETIMELTZ** | O | \- | O | O | O | O | O | O | +------------------+--------------+--------------+--------------+----------+----------+---------------+---------------+---------------+ | **DATETIMETZ** | O | O | \- | O | O | O | O | O | +------------------+--------------+--------------+--------------+----------+----------+---------------+---------------+---------------+ | **DATE** | O | O | O | \- | | O | O | O | +------------------+--------------+--------------+--------------+----------+----------+---------------+---------------+---------------+ | **TIME** | | | | | \- | | | | +------------------+--------------+--------------+--------------+----------+----------+---------------+---------------+---------------+ | **TIMESTAMP** | O | O | O | O | O | \- | O | O | +------------------+--------------+--------------+--------------+----------+----------+---------------+---------------+---------------+ | **TIMESTAMPLTZ** | O | O | O | O | O | O | \- | O | +------------------+--------------+--------------+--------------+----------+----------+---------------+---------------+---------------+ | **TIMESTAMPTZ** | O | O | O | O | O | O | O | \- | +------------------+--------------+--------------+--------------+----------+----------+---------------+---------------+---------------+ | **DOUBLE** | | | | | O | O | O | O | +------------------+--------------+--------------+--------------+----------+----------+---------------+---------------+---------------+ | **FLOAT** | | | | | O | O | O | O | +------------------+--------------+--------------+--------------+----------+----------+---------------+---------------+---------------+ | **NUMERIC** | | | | | | O | O | O | +------------------+--------------+--------------+--------------+----------+----------+---------------+---------------+---------------+ | **BIGINT** | | | | | O | O | O | O | +------------------+--------------+--------------+--------------+----------+----------+---------------+---------------+---------------+ | **INT** | | | | | O | O | O | O | +------------------+--------------+--------------+--------------+----------+----------+---------------+---------------+---------------+ | **SHORT** | | | | | O | O | O | O | +------------------+--------------+--------------+--------------+----------+----------+---------------+---------------+---------------+ | **BIT** | | | | | | | | | +------------------+--------------+--------------+--------------+----------+----------+---------------+---------------+---------------+ | **VARBIT** | | | | | | | | | +------------------+--------------+--------------+--------------+----------+----------+---------------+---------------+---------------+ | **CHAR** | O | O | O | O | O | O | O | O | +------------------+--------------+--------------+--------------+----------+----------+---------------+---------------+---------------+ | **VARCHAR** | O | O | O | O | O | O | O | O | +------------------+--------------+--------------+--------------+----------+----------+---------------+---------------+---------------+ .. _number-2-time: **Limitations when numeric value is changed as TIME or TIMESTAMP (TIMESTAMPLTZ, TIMESTAMPTZ)** * All numeric types except for **NUMERIC** type can be converted into **TIME** type; at this time, it represents a value of the remainder which is calculated by dividing the input number into 86,400 seconds(1 day), and the remainder is calculated as seconds. * All numeric types including **NUMERIC** can be converted into **TIMESTAMP**, **TIMESTAMPLTZ**, **TIMESTAMPTZ** types ; at this time, the input number cannot exceed 2,147,483,647 as the maximum. **Implicit Type Conversion Table 2** +------------------+---------+-----------+---------+------------+----------+-------------+------------+-----------+-------------+------------+ | From \\ To | INT | SHORT | BIT | VARBIT | CHAR | VARCHAR | DOUBLE | FLOAT | NUMERIC | BIGINT | +==================+=========+===========+=========+============+==========+=============+============+===========+=============+============+ | **DATETIME** | | | | | O | O | | | | | +------------------+---------+-----------+---------+------------+----------+-------------+------------+-----------+-------------+------------+ | **DATETIMELTZ** | | | | | O | O | | | | | +------------------+---------+-----------+---------+------------+----------+-------------+------------+-----------+-------------+------------+ | **DATETIMETZ** | | | | | O | O | | | | | +------------------+---------+-----------+---------+------------+----------+-------------+------------+-----------+-------------+------------+ | **DATE** | | | | | O | O | | | | | +------------------+---------+-----------+---------+------------+----------+-------------+------------+-----------+-------------+------------+ | **TIME** | | | | | O | O | | | | | +------------------+---------+-----------+---------+------------+----------+-------------+------------+-----------+-------------+------------+ | **TIMESTAMP** | | | | | O | O | | | | | +------------------+---------+-----------+---------+------------+----------+-------------+------------+-----------+-------------+------------+ | **TIMESTAMPLTZ** | | | | | O | O | | | | | +------------------+---------+-----------+---------+------------+----------+-------------+------------+-----------+-------------+------------+ | **TIMESTAMPTZ** | | | | | O | O | | | | | +------------------+---------+-----------+---------+------------+----------+-------------+------------+-----------+-------------+------------+ | **DOUBLE** | O | O | | | O | O | \- | O | O | O | +------------------+---------+-----------+---------+------------+----------+-------------+------------+-----------+-------------+------------+ | **FLOAT** | O | O | | | O | O | O | \- | O | O | +------------------+---------+-----------+---------+------------+----------+-------------+------------+-----------+-------------+------------+ | **NUMERIC** | O | O | | | O | O | O | O | \- | O | +------------------+---------+-----------+---------+------------+----------+-------------+------------+-----------+-------------+------------+ | **BIGINT** | O | O | | | O | O | O | O | O | \- | +------------------+---------+-----------+---------+------------+----------+-------------+------------+-----------+-------------+------------+ | **INT** | \- | O | | | O | O | O | O | O | O | +------------------+---------+-----------+---------+------------+----------+-------------+------------+-----------+-------------+------------+ | **SHORT** | O | \- | | | O | O | O | O | O | O | +------------------+---------+-----------+---------+------------+----------+-------------+------------+-----------+-------------+------------+ | **BIT** | | | \- | O | O | O | | | | | +------------------+---------+-----------+---------+------------+----------+-------------+------------+-----------+-------------+------------+ | **VARBIT** | | | O | \- | O | O | | | | | +------------------+---------+-----------+---------+------------+----------+-------------+------------+-----------+-------------+------------+ | **CHAR** | O | O | O | O | \- | O | O | O | O | O | +------------------+---------+-----------+---------+------------+----------+-------------+------------+-----------+-------------+------------+ | **VARCHAR** | O | O | O | O | O | \- | O | O | O | O | +------------------+---------+-----------+---------+------------+----------+-------------+------------+-----------+-------------+------------+ Conversion Rules ---------------- INSERT and UPDATE ^^^^^^^^^^^^^^^^^ The type will be converted to the type of the column affected. .. code-block:: sql CREATE TABLE t(i INT); INSERT INTO t VALUES('123'); SELECT * FROM t; :: i ============= 123 Function ^^^^^^^^ If the parameter value entered in the function can be converted to the specified type, the parameter type will be converted. The strings are converted to numbers because the input parameter expected in the following function is a number. .. code-block:: sql SELECT MOD('123','2'); :: mod('123', '2') ========================== 1.000000000000000e+00 You can enter multiple type values in the function. If the type value not specified in the function is delivered, the type will be converted depending on the following priority order. * Date/Time Type ( **DATETIME** > **TIMESTAMP** > **DATE** > **TIME** ) * Approximate Numeric Type ( **DOUBLE** > **FLOAT** ) * Exact Numeric Type ( **NUMERIC** > **BIGINT** > **INT** > **SHORT** ) * String Type ( **CHAR** > **VARCHAR** ) Comparison Operation ^^^^^^^^^^^^^^^^^^^^ The following are the conversion rules according to an operand type of the comparison operator. +-------------------+-------------------+----------------------------------------------+----------------+ | operand1 Type | operand2 Type | Conversion | Comparison | +===================+===================+==============================================+================+ | Numeric Type | Numeric Type | None | NUMERIC | | +-------------------+----------------------------------------------+----------------+ | | String Type | Converts operand2 to **DOUBLE** | NUMERIC | | +-------------------+----------------------------------------------+----------------+ | | Date/Time Type | Converts operand1 to Date/Time | TIME/TIMESTAMP | +-------------------+-------------------+----------------------------------------------+----------------+ | String Type | Numeric Type | Converts operand1 to **DOUBLE** | NUMERIC | | +-------------------+----------------------------------------------+----------------+ | | String Type | None | String | | +-------------------+----------------------------------------------+----------------+ | | Date/Time Type | Converts operand1 to Date/Time type | Date/Time | +-------------------+-------------------+----------------------------------------------+----------------+ | Date/Time Type | Numeric Type | Converts operand2 to Date/Time | TIME/TIMESTAMP | | +-------------------+----------------------------------------------+----------------+ | | String Type | Converts operand2 to Date/Time type | Date/Time | | +-------------------+----------------------------------------------+----------------+ | | Date/Time Type | Converts it to the type with higher priority | Date/Time | +-------------------+-------------------+----------------------------------------------+----------------+ When Date/Time type and numeric type are compared, see :ref:`Limitations when numeric value is changed as TIME or TIMESTAMP ` of the above table. There are exceptions when operand1 is string type and operand2 is a value. +-------------------+-------------------+--------------------------------------+----------------+ | operand1 Type | operand2 Type | Conversion | Comparison | +===================+===================+======================================+================+ | String type | Numeric type | Converts operand2 to the string type | String | | +-------------------+--------------------------------------+----------------+ | | Date/Time type | Converts operand2 to the string type | String | +-------------------+-------------------+--------------------------------------+----------------+ If operand2 is a set operator( **IS IN**, **IS NOT IN**, **= ALL**, **= ANY**, **< ALL**, **< ANY**, **<= ALL**, **<= ANY**, **>= ALL**, **>= ANY** ), the exception above is not applied. The following is examples of implicit type conversion in comparison operations. * **Numeric Type & String Type Operands** The string type operand will be converted to **DOUBLE**. .. code-block:: sql CREATE TABLE t1(i INT, s STRING); INSERT INTO t1 VALUES(1,'1'),(2,'2'),(3,'3'),(4,'4'), (12,'12'); SELECT i FROM t1 WHERE i < '11.3'; :: i ============= 1 2 3 4 .. code-block:: sql SELECT ('2' <= 11); :: ('2'<11) ============= 1 * **String Type & Date/Time Type Operands** The string type operand will be converted to the date/time type. .. code-block:: sql SELECT ('2010-01-01' < date'2010-02-02'); :: ('2010-01-01'= '2010-01-01'); :: (date '2010-02-02'>='2010-01-01') =================================== 1 * **String Type & Numeric Type Host Variable Operands** The numeric type host variable will be converted to the string type. .. code-block:: sql PREPARE s FROM 'SELECT s FROM t1 WHERE s < ?'; EXECUTE s USING 11; :: s =================== '1' * **String Type & Numeric Type value Operands** The numeric type value will be converted to the string type. .. code-block:: sql SELECT s FROM t1 WHERE s > 11; :: s ================== '2' '3' '4' '12' .. code-block:: sql SELECT s FROM t1 WHERE s BETWEEN 11 AND 33; :: s ====================== '2' '3' '12' * **String Type Column & Date/Time Type Value Operands** The date/time type value will be converted to the string type. .. code-block:: sql CREATE TABLE t2 (s STRING); INSERT INTO t2 VALUES ('01/01/1998'), ('01/01/1999'), ('01/01/2000'); SELECT s FROM t2; :: s ====================== '01/01/1998' '01/01/1999' '01/01/2000' .. code-block:: sql SELECT s FROM t2 WHERE s <= date'02/02/1998'; In the above query, comparison operation is performed by converting date'02/02/1998' into string '02/02/1998'. :: s ====================== '01/01/1998' '01/01/1999' '01/01/2000' Range Operation ^^^^^^^^^^^^^^^ * **Numeric Type and String Type Operands** The string type operand will be converted to **DOUBLE**. .. code-block:: sql CREATE TABLE t3 (i INT); INSERT INTO t3 VALUES (1), (2), (3), (4); SELECT i FROM t3 WHERE i <= ALL {'11','12'}; :: i ============= 1 2 3 4 * **String Type and Date/Time Type Operands** The string type operand will be converted to the date/time type. .. code-block:: sql SELECT s FROM t2; :: s ================= '01/01/1998' '01/01/1999' '01/01/2000' .. code-block:: sql SELECT s FROM t2 WHERE s <= ALL {date'02/02/1998',date'01/01/2000'}; :: s ================ '01/01/1998' An error will be returned if it cannot be converted to the corresponding type. Arithmetic Operation ^^^^^^^^^^^^^^^^^^^^ * **Date/Time Type Operand** If the date/time type operands are given to '-' operator and the types are different from each other, it will be converted to the type with a higher priority. The following example shows that the operand data type on the left is converted from **DATE** to **DATETIME** so that the result of '-' operation of **DATETIME** can be outputted in milliseconds. .. code-block:: sql SELECT date'2002-01-01' - datetime'2001-02-02 12:00:00 am'; :: date '2002-01-01'- datetime '2001-02-02 12:00:00 am' ===================================================== 28771200000 * **Numeric Type Operand** If the numeric type operands are given and the types are different from each other, it will be converted to the type with the higher priority. * **Date/Time Type & Numeric Type Operands** If the date/time type and the numeric type operands are given to '+' or '-' operator, the numeric type operand is converted to either **BIGINT**, **INT** or **SHORT**. * **Date/Time Type & String Type Operands** If a date/time type and a string type are operands, only '+' and '-' operators are allowed. If the '+' operator is used, it will be applied according to the following rules. * The string type will be converted to **BIGINT** with an interval value. The interval is the smallest unit for operands in the Date/Time type, and the interval for each type is as follows: * **DATE** : Days * **TIME**, **TIMESTAMP** : Seconds * **DATETIME** : Milliseconds * Floating-point numbers are rounded. * The result type is the type of an date/time operand. .. code-block:: sql SELECT date'2002-01-01' + '10'; :: date '2002-01-01'+'10' ====================== 01/11/2002 If the date/time type and a string type are operands and the '-' operator is used, they will be applied according to the following rules. * If the date/time type operands are **DATE**, **DATETIME** and **TIMESTAMP**, the string will be converted to **DATETIME**; if the date/time operand is **TIME**, the string is converted to **TIME**. * The result type is always **BIGINT**. .. code-block:: sql SELECT date'2002-01-01'-'2001-01-01'; :: date '2002-01-01'-'2001-01-01' ================================ 31536000000 -- this causes an error .. code-block:: sql SELECT date'2002-01-01'-'10'; :: ERROR: Cannot coerce '10' to type datetime. * **Numeric Type & String Type Operands** If a numeric type and a string type are operands, they will be applied according to the following rules. * Strings will be converted to **DOUBLE** when possible. * The result type is **DOUBLE** and depends on the type of the numeric operand. .. code-block:: sql SELECT 4 + '5.2'; :: 4+'5.2' ========================== 9.199999999999999e+00 Unlike CUBRID 2008 R3.1 and the earlier versions, the string in the date/time format, that is, the string such as '2010-09-15' is not converted to the date/time type. You can use a literal DATE'2010-09-15' with the date/time type for addition and subtraction operations. .. code-block:: sql SELECT '2002-01-01'+1; :: ERROR: Cannot coerce '2002-01-01' to type double. .. code-block:: sql SELECT DATE'2002-01-01'+1; :: date '2002-01-01'+1 ===================== 01/02/2002 * **String Type Operand** If you multiply, divide or subtract both strings, the result returns a **DOUBLE** type value. .. code-block:: sql SELECT '3'*'2'; :: '3'*'2' ============================ 6.000000000000000e+00 The '+' operator action depends on how to set the system parameter **plus_as_concat** in the **cubrid.conf** file. For details, see :ref:`stmt-type-parameters`. * If a value for **plus_as_concat** is yes (default value), the concatenation of two strings will be returned. .. code-block:: sql SELECT '1'+'1'; :: '1'+'1' ====================== '11' * If a value for **plus_as_concat** is no and two strings can be converted to numbers, the **DOUBLE** type value will be returned by adding the two numbers. .. code-block:: sql SELECT '1'+'1'; :: '1'+'1' ========================== 2.000000000000000e+00 An error will be returned if it cannot be converted to the corresponding type. Day widened into its first perfection as we moved down the highroad toward a near fork whose right was to lead Harry and his solemn cort¨¦ge southward, while the left should be our eastward course. Camille and I rode horseback, side by side, with no one near enough to smile at my sentimental laudations of the morning's splendors, or at her for repaying my eloquence with looks so full of tender worship, personal acceptance and self-bestowal, that to tell of them here would make as poor a show as to lift a sea-flower out of the sea; they call for piccolo notes and I am no musician. The little man elected to have a cab. When Bow Street was reached Prout had the satisfaction of finding that all his birds had been netted. He received the warm congratulations of his inspector modestly. Caloric or air engines. I did not feel very comfortable after what had happened to those soldiers who lost their lives so cruelly sudden, or in any case had been seriously wounded, while the officers took little notice of them. But it was desirable to behave as discreetly as possible, and so to get a permit to Maastricht. "Louvain, ¡°It will check up, that way, too,¡± smiled Larry. "Me run away," thought Shorty, as they walked along. "Hosses couldn't drag me away. I only hope that house is 10 miles off." Reuben began to take off his coat¡ªyoung Realf drew back almost in disgust. "Well, would Robert have stolen money, or Albert disgraced your name, to get free, if you and your farm hadn't made them slaves? If you hadn't been a heartless slave-driver would George have died the other night alone on the Moor?¡ªor would Richard have taken advantage of a neighbour's charity to escape from you? Don't you see that your ambition has driven you to make slaves of your children?" "D?an't tell me," said Coalbran in the bar, "as it wurn't his fault. Foot-and-mouth can't just drop from heaven. He must have bought some furriners, and they've carried it wud 'em, surelye." But meantime a strange restlessness consumed her, tinctured by a horrible boldness. There were moments when she no longer was afraid of Handshut, when she felt herself impelled to seek him out, and make the most of the short time they had together. There could be no danger, for he was going so soon ... so few more words, so few more glances.... Thus her mind worked. "What mean you, woman?" quickly returned De Boteler; "do you accuse the keeper of my chase as having plotted against your son, or whom do you suspect?" Her face was shrivelled and yellow, and the dark full eyes that now, as it were, stood forth from the sunken cheeks, looked with a strange brightness on the scene, and seemed well adapted to stamp the character of witch on so withered a form. And perhaps there were few of those entirely uninterested in the matter who now gazed upon her, who would not have sworn that she merited the stake. "Thou art set over the people, and to the Lord's anointed I come to seek for justice." HoMEÅ·ÃÀÒ»¼¶Ã«Æ¬Ãâ·Ñ¸ßÇåÈÕº« ENTER NUMBET 0018b046.com.cn
www.moneybb.com.cn
bjff.net.cn
matexs.com.cn
www.habble.com.cn
ieay.com.cn
wsgwh.com.cn
www.szc-r.com.cn
lafiori.com.cn
www.xb-steel.com.cn
曹柳社区 迷人的浪屄 美国成人性节目ed2k 航太郎操妈妈 我和姐姐在车上乱伦激情 大胆人体摸特乱轮小说 02xixi 四房播搏五月天 雯雯落难记 我爱操骚 欧美无码性爱故事 酒色五月丁香 泽井芽衣怀孕 天海翼人体悠悠人体 综合图区亚洲色 WWW.AU8AU.COM WWW.6667O.COM WWW.SF5203.COM WWW.GO24K.COM WWW.CECE3.COM WWW.CAOB98.COM WWW.SXHGHJ.COM WWW.JUZHIXIAN.COM WWW.EBE1.COM WWW.97XFDY.COM WWW.TFKRQ.COM WWW.2N5N.COM WWW.DI2000.COM WWW.110AU.COM WWW.38RP.COM WWW.NCQCZX.COM WWW.CVADC.ORG WWW.7777XXXX.COM WWW.NN432.COM WWW.BSRCW.COM WWW.BBB145.COM WWW.NSL892.COM WWW.JAVPEE.COM WWW.168771.COM WWW.100MBUY.COM WWW.SEWHM.COM WWW.DXCHT.COM WWW.222XFZY.COM WWW.F99Y.COM WWW.23RIRI.COM WWW.99ZXAV1.COM WWW.FQ48.COM WWW.XX690.COM WWW.168BBK.COM WWW.26L5L.COM WWW.634PP.COM WWW.CCC598.COM WWW.835.COM WWW.JNUXX.COM WWW.ZGHXSJ.COM WWW.JIMOGAN.COM WWW.ADMINBUY.CN WWW.33WWXX.COM WWW.VVVCCC.COM WWW.FDYCZZ.COM WWW.110ZK.COM WWW.0312A.COM WWW.HHH000.COM WWW.RRAIAV.COM WWW.CCC509.COM WWW.269AV.COM WWW.JNJRNO1.COM WWW.SESE8DD.COM WWW.UDW168.COM WWW.HAOAV06.COM WWW.7369.COM WWW.XLN6.COM ILYA.IOSIFOV WWW.958SHOP.COM RASRI.BALENCIA WWW.778UV.COM WWW.48XX.COM WWW.3W20RI.COM WWW.61K8.COM WWW.W7707.COM WWW.8090AND.COM WWW.PARACN.COM WWW.A0V7.COM 大奶妈妈女教师 国产母子偷拍自拍国语 在线免费观看视频偷拍 国产自拍偷拍三部 wwwyjzzcom 晚上电影网址 女生阴面照片真人版 se52se www551com最新地址 人妻淫姐影院 女友的厕所淫情 好好图BB图片 av520超碰视频 好叼色在线视频 丁香花骚婷婷 白丝在线 偷拍自拍做爱操逼 哥哥射av在线530kkcom 天天瑟瑟天天撸 熟女撸撸色 男人装五月 乱伦校园网 日本公公搞媳妇视频免费播放 a片三级电影免费看 激情视频免费在线观看 色小嫂 欲色影影院在线观看 熟妇乱伦16p 66mPPcom 亚洲制服欧美日韩 久久热爱视屏 543ac 天天电影网吧 成人激情网,色五月 狠狠撸床戏 千百撸在线视频影院 www97ddycom 三级a片在线 老司机老女人缸交 wwwjiba888comwwwjiba888com 母亲的春天在哪能播放 迅雷下载a片电影下载 古典武侠综合台湾妹 操你大爷免费AV 岛国人兽在线观看 亚洲巨乳少女色27p 亚州天堂AV201759evrcom 6cccjjjcom 性生活影片体内射精 亚洲老鸭窝在线视频 超碰AV国产少妇影院 美丽人妻14p 手机新域名ady手机看片 979vvcom很狠狠 成人动漫国内 超碰超碰超碰Av大香蕉cao388com 偷拍影音先锋电影网 管野静香视频 日本妹子黄色一级片 日本黄色图片网站www99pipicom 8050电影大全苹果 日本少女avxxo天堂网 色色村姑 55eekkcm 伦理无码片在线看 邪恶久久 jjzzhyy 狠狠干www92eeeecom 淫乱人妻辣文 手机天堂妹妹网淫荡人妻小说 妻子被人妖强 av女神第一社区在线 久草李雅 少女粉嫩穴图片写真 迅雷下载5555avco 帅哥自慰视频 黑丝做爱图片区 中文字幕干孕妇的影吧 勾魂伦理免插 制服丝袜av西瓜影音 射射撸av wwwhaleav 五月激情夜 dilidili艳母 a片玛利亚 丝袜人体网站大全 wwwbb18cnm 沙发上大白屁股 童玲同体 那个软件可以看金梅瓶电影 caoporn超碰在线视频人人碰免费视频哥哥干哥哥去 奇米嫂子骚 逼里香性奴视频 母亲变装女友 波多野结衣性感美图 伊人在线大香蕉尼姑 9日日夜夜撸在线影院l www48KYcom 奴隶人妻 看成人做爱免费片 免费gv高清网站 色色色哥色色色 苍井空超短裙丝袜诱惑图片 成人A片在线短视频 黄版黑寡妇 大鸡巴逼 看欧美AV剧情片的网站 福利视频自拍 日本高中女生电影黄色电影wwwfreepornzcom 东京天堂在线 动漫色图自拍偷拍 AV淘宝在线视频首选 淫荡的人妻妻子 超碰最新网址 久久在线经典视频 淫色裸体艺术图 马上色最新版本马上色 wwwsssscomcom 27270com视频 色妻自拍视频在线 111wewe 樱桃做爱视频 早读acg为什么看不了 mm成人快播 移动成人电影撸视频 手机看台湾成人网站 www99ybyb swwwkedouwangcom 6sss直接看net 汤不热在线播放器 好看的网站男人懂得 www080ecom 久久热re6 舔姐姐的逼 巨乳波霸视频在线 我爱大咪咪黄片 操你姐逼在线 张含韵 香港毛片三级直播 gg8090 欧美人体艺术在线视频 骚老婆说淫荡话小说 最新三级片电影 影音先锋影撸穴 色色的iiii19com 乱伦小说都市激情淫妻交换激情校园 狠狠地撸操美女 淫女偷拍 草妈妈在线av www213HKCOM 欧美AV一88tt 日妹妹影视首页 ganbbtk 人妖调教网站下载 希志爱野影音先锋 寄宿寡妇 亚洲色图偷拍自拍欧美79axcom 紧急通知小姨子 不卡成人免费在线 果果人体西西人体 偷拍厕所在线 女主播瞳孔视频在线 日本大鸡吧操女人逼 看短篇性爱小说 美女姐姐15p www969ppcom百度 幼女西瓜影音 狐狸精影院AV在线 色撸撸撸二哥撸撸撸二哥色撸橹色二哥色撸撸撸妹子色撸撸撸中文色电影撸二哥www5y8z1l h色小说乱伦小说在线 大香蕉色一本道色一本道 551mimi 丝袜视频网 果敢姑姑制服丝袜 www67bycom 5zdm午夜电影网 幼幼激情小说ctrlb 搞了两个90后mm 49vvcom五月色 色色色色色色色色色色97依依 初中妹纸的小bb 93gan影院cam 少女初夜 AV天使ftp 9777dd 变态自拍亚洲 巨乳肉文 午夜激情影院 397aacom UULUAV17com在线 舒淇的胸照的图片 熟睡猥琐姐姐 久久理论电影网 尼尼鲁手机影院 欧韩久久视频 夜夜干夜夜5岁到13岁 laicao 武侠校园亚洲欧美 伦理无需播放器 www590uucom www路bobo路sasa33路net 啪啪啪全球免费社区 脱mm网站 成人网首发www851bbcom 调教女教师视频 手机看片福利永久国产动漫 m8520dycom 午夜国产偷拍在线 曰本AV在线观看网站 欧美av迷奸 最新在线免费av网站 大鸡巴干小柔 电车系列假面超人 精品人体裸体模特3gangelrtcom 插妹妹亚洲综合 wwwyinyin8 WWWPU920COmed2k 小嫩淫水 国南集 小明看看永久2015www看imgcctuocom 女同视频 国产偷拍自拍在线视频白 紧身裤美女AV 97久久超碰免费视频在线观看 619ppcom 人与动物乱交magnet wwwkuku59com 男同性恋囗交肛交免费小视频 啪啪啪在线兔费 秋霞夜色伦理 妓女淫片 撸图强暴 野花在线图片 欧美激情爱爱图片 体育系列AV 撸醒睡熟儿子乱伦视频在线 伦理片琪琪第8页 骚逼女人自慰图 肏屄裸体免费看 wwwCC296 火影忍者谢哥博客 痴汉图书馆5小说 lolomao类似网站 福利视频av影院 菲菲影院城菲菲干 日本高清视频magnet 套图综合下一页 美国打炮一级片 不要播放器的成人av 妇刑小说 欧美性交成人网站 小说美丽淫荡的表姐 av萝莉女友优排行 超碰视频www023sbcom xrpav 52avavhaose我爱avavhaosewww36kvkvcom bt6080手机版在线观看m6080cc 夜夜骑夜夜日每天更新 2017年可以用的色网站 白丝16p 群交欧美在线 010狐狸精电影 怡红院成人电影网 6699mp4 亚洲图区欧美图区偷拍自拍 朝国三级篇 爱爱人体 狠狠射大力操 国产自拍wwwaa0ecom 强暴偷情 www小明看看网页 河马xxx 交妻换夫俱乐部 国产AV医生护士搞女的极美 WVW2499 hutaba3 大肚男招鸡先锋 巨乳加勒比系列 如何能看到三级片 影音先锋波多野结衣删除 绘狗人体艺术照片 日本小骚b美女 骚娃人妻 我与伊一做爱 新片欧美十八岁美少 国外幼少女电影 youji4 白嫩大奶丝袜美女 性爱口述大鸡吧擦的嫩屄淫水直流 裸体黄色网站 男女真人做爱图美女爱做爱 爆乳娘影音先锋 dongqindejinkuang eva美女邪恶漫画 爱乃なみ泽北优香 达叔街头恶戏背射 淫荡的老女人图片 松金洋子影音先锋 人体艺术入浴 与舅妈的性事与爱的欲望eenvren 冠心病可以服用哪些壮阳药 连襟换妻乱伦 性爱派对图片 色洛洛图吧 人体艺术丰乳 肥妇视频播 国产性爱自拍在线视频 77sssee 媛交丝袜美女网站大全 足交磁力链接 h黄色图片网址 同性同志第一页u性 seq网址大全 色妹妹avcom 真人动态邪恶操逼表情 c40813f900105e57 电影我爱欲女三邦车视 97isese最新 thunder 萝莉 无码 很黄很色的小说 亚洲自拍电视 第一人体艺术图 好阁色电影在线观看 屄插入两个阴茎 wwwxxoo888com 秦皇岛人体艺术 115色图礼包码 操穿丝裤搔逼 少妇熟女网址大全 模特男鸡巴 中山忍pan 迷奸人妻套图 越南幼女做爱视频 爱爱成人电影迅雷下载 欧美7岁幼女性交小电影 660avcm 日本继母快播 撸撸管影院欧美色图 美女 被插逼逼图 拳交 am 亚洲 欧美 迅雷 下载 全国最大成人三级文学图片电影 美丝足人体图 bt磁力链接五月婷婷 国模冰冰自拍 thisav新网 日本大胆裸体照片 丿爸爸插女儿 我用手机看百度里面的美女图片为什么会自动下载 色哥哥乱軜片 百se8899 女人曝光无遮挡照片 狠狠艹五月天 骚小妹影院 大奶美女视频 国产父亲插女儿视频 115网盘礼包 韩国演艺 小日本女优黄色网 WWW_CKWE2_COM 轮奸抽查奸母亲 很橹吧操我吧 日本无码电影qvod 大色网我爱看你懂的 欧美美女与野兽性交快播在线观看 苍井空到底有无码的片子吗 性爱操逼图片 美女裸屄艺术照 大片黄色 想几个男人操逼逼 逼综合下载 成人性爱视频片 狠狠撸吃鸡巴 一捅一叫春 朴妮唛在哪一部裸上面 香港马交 大白屄大黑屄 从河庄村到西局坐共汽怎么走 亚洲 欧美 乱伦 小说 日本韩国男女做爱图库 图片人体 txt全集电子书 印度新娘大结局 潮易网 冰火小人闯关 南京长江大桥简介 小色哥中文字幕dvd 性爱妹妹在线视频 五月天色色快播成人电影 老外操中国美女视频 富翁们的乱伦小说网址 缺德儿肏后妈 女人逼啦 先锋影音模特冰冰 1024基地手机在线看片 淫色正妹推油激情网 东营万达影院今日上映电影 色妹妹丝袜 维族少女人体艺术 老女人露脸口交哥必撸 weiriguobidejiba 我和妹妹小姨子性交 法国男人的大鸡巴 大尺度裸体操逼图片 日本人体艺术插入图 聊斋乱伦性事 春暖花开性另类视频区 贵女淫乱 美鲍色图操b 夫妻性交视频网 日进来综合网 西西人体艺术cct 儿媳妇吸爸爸大鸡巴 张柏芝艳照偷拍 在那可看李宗瑞 插逼激情网 741het视频播放网站 中文五十路母乱伦 嫂侄性爱 美国黄色网站大全 舔妈妈的骚屄 木耳嗨嗨影视 WWWMEIZYWCOM WWW98ZKCOM 小岳母的淫水 迷奸姐姐小说免费看看 亚洲色图黄色笑话 尿到阴道里好吗 美女裸体人体艺术图片大胆 我与模特的激情性爱 章子怡淫照 新视频网 黄色小说欧美色图五月天 卡通bt欧美 穿黑纹胸姐姐 香港成人免费电影艳照门 捆绑3p 日韩人体黄色图片 日逼wang 漂亮面孔奶子圆高潮近叫不停 影音先锋看我撸 免费成人一级电影 老熟妇性感图片 梦里和年纪大的老ren WWW511SECOM 非洲女人的双洞图 海边裸体女人大秀美胴体 极黄色片 丝袜激情诱惑小说 熟母鱼住纱江 成人综合撸图 怡红院5月份 狠狠的撸欧美人体艺术图 幼女海滩p 免费性爱视频点影观看 WWW11TTBBCOM 俺们撸女同 农村尻屄故事 淫荡妈妈与色儿子 18成人人体摄影 丝袜高跟色图 欧美裸体艺术女人 骚逼败火 12345678性爱 快车成人电影网子 长谷川孕妇 最激性亚洲顶级图片 明星版h小说 日本色图无码大奶色图 哪个黄色网站有明星的艳照 在线播放生活片 和少妇大战p 男同性恋自拍在线 男人强奸女人屌逼 性感人体艺术西西人体艺术 老妈的大白 操了一个模特 怡红院在线看 肏逼撸撸性爱 插女友的嫩肉 亚洲色图另类性爱 春潮色播 明星合成3p网 怡红院潘晓婷 女人被日的图片 97人人操空姐飞机上 伊人色magnet 最新伦理电影云点播 123好逼网爱逼网人人操 淫色uuu 激情网激情网影音先锋 淫荡骚妇12p t偷拍小电影 美女被叉叉的免费网站 亚洲白拍乱伦第二页 淫香淫色最新网站 肉丝裤袜跳蛋小说 哥哥妹妹邪恶小说 日韩色图黄色 久久打炮wwwjiujiu6pcom 张芘张筷雨美丽一生 夜色猫视频网站 免费在线黄片中学生 操操操成人图片 girlanddogUSA 色和尚社区激情 插我好舒服射精大鸡吧 刘嘉玲人体艺术大胆写真 空间更新av wwwhbmaocom guaishou521 美国九九九色成人网成人网站 男孩女孩玩性交电影 WWWCBINFO 女王调教细高跟马眼 天天翘操妹逼 刘亦菲H小说 美国深夜成人剧百度云 欧美性爱1页另类视频区 性感tud AV片网站luba321com 琪琪热热色原a自慰 强奸呻吟扭动一本道 亚洲成人色图自拍 幼童pussy 汉庭猛操儿子同学的妈妈 终结者成人版qvod 人妖与人萌 李丽娜下载 哥哥啪啪萝莉表妹邪恶漫画 国产老女熟女第6页 妹妹被哥哥qj 色狗奇优 www9988sslulucom 亚洲性爱ckck爱情电影网 轮流中出 虐蛋蛋番号 人妻熟女校园春色古典武侠 www操屁 wwwjjzzzcom caobiwangf 乌克兰BB wwwnow32info 黄色片做爱后入式 意淫妹妹乱伦意淫 操嫩逼网百度 迷奸嫂子 图文性爱小说 卡戴珊2小时33草榴 肉质人体艺术 防屏蔽地址布加入收藏 欧美色温小说 69式性交裸体秀 sm会所女同志调教女同志 大香蕉强奸wwwponegcom 丝袜骚母丝袜 可乐看片软件 乱伦干爱 忧忧韩日大胆美女嫩穴艺术 鸡巴吃色色 涩涩乱伦小说 性感诱人大鸡巴 驱灵师超越 中国国模03150p 操对面淫荡黑丝母女 台北嫂子 诱人的美女炮下载 真人做爱姿 铠甲勇士刑天后传全集播放 色和尚wwwyyyp8 手机avwww380cccc 爱AV软件是什么 做爱电影胸大的 苍井空闲人网 希望笑纳^0^ 女人被群插小说 欧美派对上疯狂少妇a 777米奇色wwwse004com 韩国妇女吃精 97色色77piancom www路fa876com av大帝电台 曼妮风骚露妹妹电影 美少女3P中出凌辱叼苍井空 1122zx无法访问 美国男同性恋免费电影 加勒比海盗3快播 北原夏美AV 乱伦骚妇25p 操 俄 快播 www黄网com 无毒爽片网 春色浓喜 樱井莉亚雪 樱井莉亚漂亮 樱井莉亚钢管 求外国h网 现在能上的h网 不要www访问 视频东京热 东京热n188 东京热人气 哪里可以看黄片 极品黄色小说 撸撸黄色小说 渔船上的一父三女 秘密花园 色欲电影 特色导航 日韩色姐姐 狮子王导航 写真和动漫 一品色电影 一起色影视 快播A片电影 美女咪咪人体 母子淫乱电影 我爱鸡鸡影院 一色吧成人网 幼幼之家论坛 101成人小说 7se高清影院 AV五月天电影 大骚妹成人电影 AV盒子谁有E谁有G mejane在线 涩涩 她也色 岛国 一色春 成人自考 深爱基情网 第六色 4438x影院手机版 精品国产瓜皮影院 www89,x,cc 91影院老师机 javzzz 丁香婷婷 mp4 为什么4438x播放不了 japanesehd宾馆在线观看 AV学校厕所偷拍 宅色 ananshe 5 白色手机天堂网站 a片同性 艾米影院鬼父116 2018art合集磁力 mp4 hkd 002磁力下载 一号影院 mp4 绀野真子种子视频 aV性爱无需下载App,手机直接看 325bb、con 人人拍人人操 99热色哥 操B视步页 小明免賛在线电影 国语爱爱迅雷 magnet 免费性爱视频69vj 神马影院张飞跃 9877h漫 360免费av视频 青青国产中文在线 强奸黑丝美女老师视频 强奸乱伦午夜成人影院 秋霞影院baqizicom 人狗 mp4 小科影院 小叔子金嫂子公公趴辉 羞羞影院每日黄片 情欲超市 ftp 秋霞理论免费毛片 强奸女在阴里塞东西视频 日本那些真强奸的视频有番号吗 日产午夜嘿咻剧场 日逼三级 影音先锋看片资源xfxy69 在线手机自拍福利视频 日本女优视频红番阁 在线 无码 国产自拍 丝袜 中文字幕 月岛杏奈视频 在线免费视频 日本真人前入式视频 有黄视频的月光影院 有故事情节的番号 手机在线免费视频 步兵h 93gan手机在线视频 ftv girls 美女薛婧裸体外阴艺术 avhome yuse 最新地址 一本道人人在线葡澳 六九色综合打不开 中国最大成人网5510 来5566手机视频电影黑夜在线? Gav种子 色帝国导航 1meiluge 京香人妻动漫 阴色自拍 西洋艺术裸体丝袜图片 国内熟妇自拍视频在线 云拇指智能视频 胔老妈的大白屁股 久洲AV g广未凉子 广州sm论坛 入魔 快播 波多野结衣d∨d在线中文亚洲无码无码视频 色老女人视频 爱田奈奈迅雷 国产自拍网在线 中文自拍在线 台湾在线视频国产 有哪些看黄片的视频软件 可爱妈妈伦理电影院 阿v在线视频费国产 lunliyingyuan 欧美绿色无毒在线视频网站 女人真人工授精全视频 5438青苹果视频 看操小嫩逼视频 萝莉AV视频资源 嫩模凯竹无码磁力 mp4 绿茶福利会员40 91chengr 噜噜噜a日本 360韩曰最新三级 天天在线播放av 农村荡妇偷情-级片 日韩操b视频。 超黄逼免费 在线资源站 百度美女群交视频 - 百度 偷拍酒店水床 988PORN在线视频-男人插女人骚视频-988PORN视频 - 百度 伊伊成人在线播放 中文无码先锋 婷婷六月 成人动漫 dajjjj 成人五月仙 校花女神肛门自慰视频 97影院家庭 猫片迅雷 公交车上干杨玉菇 良家露脸 色色999 midd565图解 成人A片 迅雷下载 aiaifulidaohang 秋霞偷拍自拍 与日本妞性交 av研究院 nhdta 279在线播放 av搜索线网 微拍广场747 能搜索片名的av网站 大香蕉免费中文字幕午夜影院 三上悠亚吉村卓是哪部 空姐AV种子 唐朝色影院 老王AV电影 猫av90 李宗瑞五十集 冲条杏梨在线 ipx在线观看 男人团大桥未久2016 伸进她的短裙里揉捏 ebod 339 在线观看 bb 激情五月色色波波 EKAI系列 八虎影院网址 五月天天堂电影 韩国女主播合集无水印 第一福利av免费观看 法克小视频成人免费视频 大肉棒强奸 福利漫画里番 youbbb新站 吉泽明步48网盘百度 海猫网最新视频 天天在线观看国产 磁力链 月见栞 亚州女与黑人群交视频观看 好好日在线事情 肉番MP mp4 刘苍井 色伦理片 中文字幕伦理日本免费 午夜小影院。 国产美女做爱偷拍自拍在线视频 午夜色大片在线观看视频 2018最新国内自拍小视频 成人乃妈 午夜影院免赞看无码 浣肠video在线观看 日本黄漫pq 日本娇喘 我的蓝色内衣家教视频 神纳花电影在线观看 xxxooo日韩 李韶姬自慰小说 国产图片,偷拍视频7区 在线伦理国内自拍 你懂的导航91 狠狠櫓AV視頻 青草a免费线观 7090电影福利 91po r n在线观看国产 御工黄色视频 ai美女鲍鱼b b福利 福利1024 mp4 影音先锋主播勾引 042815-863-CARIB-視界侵入 黄色视频免费在线播放 溜溜吧在线伦理片 国产自拍 水滴 聚影vip播放器,如何看福利 哥哥搞在线播放 性爱小视频下载 种子 欧洲影片黑豹免费观看 果哥出品全集在线观看 秋霞官网奇怪的理发店 hnd—601 先锋影音 赤井美月无码全集 uu729 成人快播骑兵动漫 超碰在线色视频 你x我x网欧美网 肉蒲团之桃花观看 4438成人免费全国免费网 小坂惠在线观看 嘿嘿影院 七次郎 任你操妞免费视频 色吊tv 青青草原人人国产 眼镜哥成人视频在线 WWW、SeIangwu、3xyZ 免费视频九九加热 半强jing短篇系列校花 福利视频飘花电影网一 宅男女神兔姐直播在线观看 夫妻床上日b视频 自拍网站汇总 小萝莉在长辈家中被奸污 不卡的国产 操逼大全 欧美高潮磁力 先锋影音福利 美女野外直播ed2k magnet se3377se 2018青青国产视频偷拍手机观看 九九深夜福利在线免费试看 国产尤物 magnet 自拍 偷拍 清纯 唯美 丝袜 吸血贵利王磁力链下载 123248hhh 国产极品女主播在线短视频 番号水杯里面下药 2017日日爽天天干日日啪 强奸乱伦 美尻 K频道国产网红视频网 陌陌动漫影院 欧洲av日本av福利 重口味sm番号 www;bb;kk[pp 爱剪辑欧美性爱视频 协和影视 julia 天堂鸟ttnbbs 百色屋色源网 xin86 500导航 magnet 石川施恩惠在线 av福利院 91很鲁色棕色 大香蕉巨人免费观看 极速在线 欧美 亚洲 偷拍 北川童在线 东方Aa视频 113页国产视频在线 ntr少女视频 欧洲美女ffxx 快手门 国外成人在线tv直播 凹凸卫生纸福利视频网 同牲 extreme sm tube 东北操逼小说 社长秘书紧缚奴隶B 艾薇资源共享吧 小泽玛利亚在线视屏 小早川玲子爱情电影网 小泽玛利亚无码在线视频 小仙儿合集迅雷链接 小老弟影音视频 性雅阁大香蕉 学生性交视频 ftp 小V欲女规视频 邪恶少漫画3d里番全彩工口acg网站 先锋影音超乳中文字幕 色在线视频综合影院 欧美 一本道 自拍 三级 sm的番号欧美 92电影网福利男人天堂网夜色9 武侠强奸 magnet 33qqbb 色男人天堂小说 123无码在线av 谷原希美在线视频中文字幕西瓜 佐藤爱理全部电影 激烈抽插少妇动态图 100视频福利在线视频 午饭成人电影 日本高清视频wwwom 下载男的跟女的做爱的黄片儿怎么下载怎么搜索黄片 最新av直播软件资源29P 久播 福利 日本亚洲福利区视频 97无码R级 骚货人妻网站 秘密搜查官 快播 午夜影院527 台湾黄片A 被痴汉尾随侵犯的母女番号 西西女性高潮视频 淫色草民电影 jpx231磁力链接 荡女报恩亚洲视频 超碰视屏 快播噜噜电影网午夜 我正在看《少女爱黑吊-眼镜制服妹被黑吊抽插 - 青青草在线视频》,很不错,有兴 影音先锋 club 阿力沙在线网站 青春福利偷拍 四虎无码不下载直接看 七七久久在线观看 av分类查询 高清有码色哥网 新任女教师石原莉奈作线观看 综合视频 偷拍自拍 玉蒲团免费登录 加勒比黄片 国产援交露脸自拍 国产在线偷录叫床声 韩国女主播手淫 国内自拍直播网 兵崎真绪 迅雷下载 magnet 苍井空啪啪啪过程福利视频 本子在线下载 国产综合自拍 偷拍在线 操币网 苍老师黄片视频免费观看 k频道导航宅宅影院 老太太b心 yinqi网 亚洲天堂18 新谷露影院121在线 六年级学生教师性交 筱雨张大胆魁惑5 强奸18岁嫩嫩的高中女孩被轮奸 人人97caoporen 色男人色天堂旧址 殴美黄色片子视频 青青操久久成人视频 一之濑桃素人 隔壁老王七七久久 茉莉 成人色区 sifangpian 备用 被窝午夜手机自拍福利视频 s:玉蒲团5 操逼逼爽 啊啊啊视频 sm视频小视频网站 操b视频激烈视频 welcomea级黄色片 藏精第一福利在线 v∧男女作爱视频动态最黄 VIP私人玩物粉穴 sdmu749 曰日干夜夜插 中国teen 操你视频在线 1国产porn丝袜大屁股视频 情趣磁力 magnet 成人电影视频网 大香蕉猫咪久草综合 +21sexvideo 欧美男男毒爱 堕落的人妻 雨柔 txt 丁香五月亚洲图片 六月婷婷网址 李小璐五十部解压密码 古图解墓丽影h版神马电影 周防雪子家庭教师 榴草福利 鸡鸡叉逼视频免费安全 俄罗斯胖女人tv 日月夜夜乳乱视频 橘梨纱视频在线 特级毛片高清无码 日本无码激情性交免费视频 一本道乱交bt种子 国模迅雷链接 cili 600 xx 高清无码喷水迅雷 ed2k 极品女友爱吃大肉棒视频 国产群交偷拍免费视频 操呦呦777 国产自啪偷啪视频在线 操哭学生妹 韩国美女激情vip秀187 爆乳美女主动让帅哥摸故事 国产真实泄露在线 厕所偷窥丁香五月 不毛之地黄片 极品少妇视频中出 国产巨乳波霸2页 娇花三弄朱紫莺 干露露视频9部迅雷 暖暖福利a片 台湾瘦美美女种子 日本无码片lll03 全网最全AV4833 夏馨雨大尺度外阴展 7tav国产自拍视频在线 爱爱小电影网站262 aav视频免费播放 女人有奶水的伦理片 美女自慰在线视频超碰视频 福利九州导航 成人 最新欧美番号 下载成人影院安装 www560hhcomfefegancom 波多野结衣伦理人性 pppd 西瓜影音 4438为什么播放不了 在线出人黄色网站 64uuu 最新五月丁香情网址 女友小诗王海 酥胸高潮视频 一本道国产精品视频 国内午夜免费福利视频 27paopao强力免费视频 艳母被窝 良友导航87在线 极欲燃烧 快播 国产在线 强奸乱伦 大奶骚B视频 97搞 我要美脚社区爱斯艾慕 伦理片eeussa片 色和尚57557 伦理片巨乳伦ess 美女被调教视频网址 色麒麟无码帝国av影院 鲁sir 柠檬导航 色偷偷电影院 深圳豪哥95炮友第六期正片 马匹窝免费做爱视频 色色助手 秋霞电影鲁丝片国语 今日六月丁香 家里迷奸偷拍视频 奇米影视盒三级 视频 琴瑟制服丝袜 江雪兰女烈 秋霞xoxoxo 激情男吹潮女视频 激情图片 在线播放 激情做爱插进去视频 去火涩 QE稻森麗奈 黄色网站 西瓜影音 482q 海影库伦理 亚洲涩涩虎 蒂亚tia ed2k 性奴调教 电影 1992 东方伊圃园在线 欧美一级A片视频 跟拍抄底超市里边玩手机边挑点心的风骚丁字裤长裙美少妇 被窝网理论在线福利视频 色七七手机视频无需安装播放器 自拍网站国产精品 日本达讪人妻中文字幕在线片 小红帽网站最新链接 抖音爱露露17分钟完整视频 大香蕉一本道在线 丝雅内部破解视频 japanese+hd+teen 寝取部在线观看 gao669视频在线日韩精品 大象福利视频网 free 萝莉poen 地址三 mmraa065 磁力搜索 汤姆tom四虎 那里的香气漫画无遮版 国产 色 在线 人妻 91蛋叔奔驰第二部 色86网 怕怕怕日本视频大全 红番阁免费播放器 黄片带叫声 黄色动漫视频网站 黄色乱伦视频在线观看 女生光膀照 啪啪影院 黄黄片网站有哪些 很很露在线视频观看97 欧美磁力链 下载 好看福利在线 狠狠揉捏着她的奶视频 泡了个大学妹子脸蛋漂亮性欲强带到酒店 后人动态图 狠操视频资源 华夏成人影院午夜 日本中学生做爱免费视频 强奸乱乱人妻 后入 夫妻 自拍 视频 z 黄色一号视 天天鲁天天射综合在线视频 2福利 小视频 骑鸡巴的视频 中国porn自拍在线 女人被抽插激情视频 我的大鸡巴爸爸影院 日本射精自拍视频 东北农民自拍 @uu在线赌博 东方影库555 看真人一级黄片 四虎影院里有黄瓜十八禁 欧美h片迅雷下载 magnet 黄色干屄视频大前 国产伦理自拍聚合在线观看 蕾丝拳交解禁 716OC0M wwwⅩV|DEOS luluba在线av 啪啪啪的漫画甜逼逼 3d爆乳女教师快播 废弃的豪宅 在线观看 五月天毛片基地 2019年偷拍自拍手机在线 av第一页 近亲兄妹中文字幕无码有码 雯雅婷mp4在线观看 magnet 色中色综合影院 色老板影院╠免费视频在线观看 av之家av导航av电影 653cccom id034一之濑桃 小早川怜子在线无码 成人在线不要播放器萝莉 大美兔在线 主播扣b全裸 鸥美成人影院 八子妻福利影院 国产在线2224 男人鸡鸡叉女人逼视频 国内自拍青青20186 尼姑吧福利影视 韩尤物女主播诱惑 奶水乳汁揉捏在线观看 韩国喷奶视频网站 韩国女人的奶插我的视频嗯嗯动作快点出来了 国模小莉宾馆私拍花絮视频流出阴毛有点重亮点是全程搞笑对白 男人插女人视频3d988 国内a片直播 免费DVD欧日韩视频在线播放 国语日本电影 欧美在线 成人 日本熟女大白屁股 美国老妇人的生殖器外加视频 影音先锋淑女人妻 日本Beastiality 女主回村子被戴面具的人强暴的里番 日本空姐飞机上群性交视频 美美爱爱在线 美女与帅哥曰逼全过程 美女黄片A片 另类综合性 001vod 新视觉三级午夜日本 西西另类偷产 强奸AV王者荣耀 艺校高颜值背着男友过夜在线 我要xxoo 伦理色电影三级片 小姐和帅哥在一起操逼的视频下载 叶月奈穗磁力迅雷 1午夜视频丁丁进bb 1黄色做爱图片动作 经典国产自拍 神马影院 牛牛在线刺激自拍 纵情网 yy6080级理论神马在 325sao 2017男人天堂网免费网址 老黄鸭影院在线 av伊甸园最新地址 av男人小视库 被祸电影网 西瓜影音 日本成人性爱视频在线 女优电影院 欧美图在线视频 超清伦理丝袜写真 大黄号在线手机福利 自拍偷拍 家庭乱伦 制服丝袜 jux-540 快播伦理迅雷下载 偷拍自自拍亚洲经典三级 欧美做爱色图30p 骚屄凯蒂和闺蜜桃子的同性激情性爱 百度十八av 大奶子性爱影片 哪个黄色图库网可以上 大香蕉电影在线观看 快播第六页 强奸撸网 saofubei 仓井空百度视频 人体艺体大写真 乳晕大大露脸自拍 熟妇发骚疯狂要爱 影音先锋资源站我去 日本乱伦狠狠插图 苍井空人人体 丝袜内裤人体艺术 ww77com 黄色操比乱伦图 成人人体bb 骚偷拍自拍 欧美屌插入屄里做爱全裸体美女图片 色小姐台湾人妻 溪流中的美女人体 极品老熟女的逼逼 美女么自己鸡巴 午夜干美女小穴 欧美大奶孕妇乱伦 qingsedingxianghua 波多野结衣片子吧 兽交小电影 老外的大鸡巴插中国美女 ww色五月 美女张筱雨裸体人体 表姐内裤里淫穴液 欧美人体私处摄影 743vv 同性爱一本道 黑女人屄 人休模特摄影男女双人棚 草裙社区5566伦理片 亚洲五码区迅雷 东京热狠狠爆 是不是所有欧美男人的屌都比较大 百度影音成人区图片 250ppcum 张柏芝日屄门 鸡巴插阴道实图 国内厕所偷拍视频在线 十八岁少女开饱视频动漫 最大胆爱爱图 李宗瑞不雅照外泄全套高清图片和视频 吉吉亚洲有码 小川亚美纱qvod 偸拍骚妇 偷拍美女走光10p 骚女无毛逼 李宗瑞15p df837a1700007500 屄屄白虎袅袅 影音先锋2015偷拍自拍 快播少妇潮吹 人体因片阴道 抽插淫性交游戏 颜射色图片 肉棒小穴玫瑰临屏 谢婷婷多大被操的 美女医生的性生活故事 口爆 小穴 东京热 tokyo hot 永沢まおみ 在线播放不需播放器 147人大胆 艺术 裸女在线激情第01集 色狼公公给模特儿媳下春药的乱伦性爱故事 强奸美国女人 大学生援交50p 台湾佬爱发宗 操逼有神魔好处 cccc36色姐 膛内射精 内射90后 p 黑人大番号 色老爹小说 女人跟狗做爱迅雷种子 插妹15p 伦里小说全文阅读 成人熟女俱乐部 干小穴23p 亚洲色图 群交 人与兽黄片视频一级片 鸡巴操穴潮喷图p 狠狠插逼狠狠干 chaocijizuoaishiping 色人色天使校园春色小说 激情小说人妻小说 建行 刘菁菁 动漫美少女喷血15p 儿子操我老婆 骚妇插逼图 肏逼的游戏 黑丝系列a片 少爷 雏 开苞 kk色色网 qq影音 幼交兽交 和丝袜姐姐爱爱 插进她黑木耳逼逼也很舒服【12p】 妹妹 水 淫 美女冶觓iai图片 动漫人体艺术露穴 天天射屄综合图片网 大牛村群 国产av偷拍在线 百度云看片网址有没有 老熟女撸撸图撸撸图 电影一级片处女的器官 欧美av人兽交 baieluoshirentiyishu 高清电影下载网站哪个好 幼乳图片 兽交小幼幼电影 彩色黄色漫画 经典三级笫四色 徐小可 uu1111 电影 骚穴美女美体图片 骚货颜射 WWW_QQQ2222_COM 沙希第几集有床戏 妈妈性游戏中出 嫩模粉嫩美穴狠狠鲁 横山美玲骑兵第1集快播在线播放 乱luen小说wan删除 插淫逼图片 狂干少妇美女眼小穴小说手机看书 少女高清av 和狗操逼网 粉木耳快播 插入鸡迈 鲍鱼逼 人体艺术 欧美美女口交图 李儿媳干人妻 狂野抽插小妹 好看的黄图 ilovekao 口交性爱电影 松岛菜菜子 淫荡姐姐和狗做爱淫水直流 阿斯顿马丁标志 张雨柔 路边吉他队 西城影院 异世草木师 治疗过敏性鼻炎的药物 新新魔塔 台湾成人 八仙过海老版全集 t恤衫图案 色艺艺术中心 男人和男人肏腚眼 色大娘快播 父女囗交 影音先锋色片插屈眼护士 漏出息子 WWW_52KDM_COM 撸nenbi 激情男上女下换妻小说 娜娜人艺体术 明日花绮罗ッの痛み下载 韩国主播艾琳第一部旋风磁力链接下载 美女做爱15p 求苍井空sm xxx美女腿逼毛 cgx全集zip 在线成人骚货网 母亲の香织p 在哪可以看到艳照 先锋影音中国黑人 偷拍东北农村火炕乱伦 堀北真希无码 不用任何播放器看黄色 好色色播 乱伦系列ed2k种子 快播色老妈儿子小说 騒公鸡影院 偷看老师做爱快奥 h版电影观看快播 影音先锋美女扩肛电影 强奸a片百度影音播放 玉蒲团之玉女心经 激情影剧院 黄色短篇小说我和我的小姨 欧美金发女人做爱图 男人暴奸女人的黄色小说 天空人体av图片 日加色 jjplayer伦理 大胆妹娟 颜射合集短片视频 大屁股大奶子的av 挠脚心的小说 风间优美裸体影音先锋 欧美美女外阴 美女性交49p 裸体展阴毛艺术照 se欧美性交 日本女同性片qvod 淫妇淫语 ww亚洲ww 99xxxx在线电影幼女片 小色哥成人站 黄色做爱同房 百度云大胆人体艺术 东北的卖屄女照片 宇都宫紫苑快播 成人性爱艺术草君社区图片 yazhouxingaitaiwanlao 日屄很爽 luotimeinvtupian 泷泽乃南先锋下载 7777ci 1919go全集wctoupai 时田爱梨写真视频 欧美幼女被黑吊 青苹果网站色戒 一淫片少女被裸体内射 美国大奶骚妇掰开阴道拍摄顶级露阴人体艺术诱惑裸图 妹妹毛图片 影视先锋av爽片电影资源网 人艺术高清 相思美眉丝袜 l47人休艺术性爱 美女全裸顶级艺术 怎么用手机在线看片子 WWW654KXWCOM 强奸后妈的淫穴 冬天阴茎变小 一一西西人体艺术 熟女谷村志保 欧美操逼逼逼 张筱雨阴道有多深 三姨子 人体坊网站 催眠迷奸丝袜美腿姐姐 淫射11p zooshkool 亚洲伦理片百度影音 WWWCQCCOMCN 谢文私人体艺术 吃六神丸壮阳吗 大胆做爱人体艺术图片 淫乱图片下载 大陆a片网址大全 丝袜人妖肛交色图 一个男的和女的做爱几秒就射了是韩国的叫什么名字 超碰视频成人免费 毛片成人综合网 美国性爱俱乐部 色青tuoyiwu 绿岛影院影音先锋 2008艳照门图片下载 漂亮姑娘馒头屄 母亲为我生下我的孩子 濑美丽奈 女优淫水 熟女自拍色图 小龙女被虐记 欧美视激情 五十路丝袜 强奸滛乱 wwwsskanzyzcom 舒淇裸体写真无码 屄色哥 亚洲爱爱17p 自拍越南孕人操 日韩多p人体 亚洲骑妹妹 chengrenxing 中国美女洗澡时奶子头的真视频 WWW562GGCOM 搜狗人体图片 日本女人性行为视频 乳汁人体艺术 黑人操白人操屄图片 团团影院vip破解版4.2可下载 美女自慰喷尿射水操b 草逼she 偷偷摸摸成人电影性爱 百度一下插屁屁 淫色网欧美 tingtingwuyuntian 小说乱伦母 美女臭脚脚交 哥哥去小说全集 乱伦骚逼小说 dioguitar 儿子干后妈的小说 偷窥自拍都市激情校园春色 欧美色很很撸 特殊女同拳交 久久日干学生妹视频 欧美性爱冠希哥 毛片女人骚逼图 荡妇肛交 色哥鲁 马六女人裸体大胆图片 dadanmote 欧美影院 美丽的丝袜老师妈妈4 zuoaiwangzaixian syxxb wwwkbb7 换妻视频在线 xxoo578 色成人激情小说 鸡巴播进妈妈的穴 辽宁夫妻自拍50p 艳照博客相册 操毛屄屄 美屄日狗 色老师小说合集 妇人的骚屄 色姐姐激情操逼小说 小美女种子下载 色姐操逼网 中文字幕qvod性教育 四野战打炮 女孩被舔逼至哼哼 WWW88ATVCOM 影音先锋迷药推油 淫色舅妈 爆操肉肉少妇 入侵者日本在线播放 � 人体大胆艺犬 偷拍自拍爱唯 迅雷下载韩国操 哪个明星的逼最好看 郏县少妇乱伦 色干女 十五岁男孩操十五岁女孩 我们69式互舔 yibmj 日本3d成人片下载 美洲大胆人体艺术 厕所暴奸在线avi 96色色com百度 亚洲若怒超碰视频在线看 骚妇的骚穴套图片 欧美色图推女郎 亚洲mm激情自拍区 女豹2电影在线观看 大胆日本人体艺术电影 新亚洲成人网站 wwwhaooxxcom 在线视频强奸乱伦制服诱惑凌辱侵犯 搜索sexinsexnet 好想要性生活 亚洲自拍偷拍kkkk91com 超碰教师在线播放版 俄罗斯肥女性爱 奶火焰电影 素人土井春加harukadoiaisy8随意影院 188baidu 大鸡巴狂插B 欧美男女性肛交 2017成人电影云播放 午夜综合网激情五月 偷拍强奸乱伦www5u6bcom 欧洲人体艺术插入360kan 91puppydog沉沦的妻子 大香蕉大香蕉网人人看人人操人人碰av视频 夏夏和公公 www女人与狗con 新疆妹妹群交 香港性爱电影盟 偷拍校园春色都市 wwqpp6scom SIRO系列全集更新 高清亚洲14岁女童色逼逼图 韩国三级在线视频精品 高中生色图 金梅瓶2在线云播放国语 日夲一夲道老人在线 在线幼女成人区 色视频高清在线观看mhuangseshipincomhqxtubecom 婷婷爸爸爱你 汇聚全球亚洲精品制服 艳舞影片草榴社区 男人男人天堂a视频 曰本美女性交吃吊 超碰黑色丝袜 婷婷影视网 久九热人兽篇 苍井空AV目录 亚洲无码按摩院 一骑欢色a片网 仙女和农夫在线 a插菊花综合网站 www网友自拍comwwwzhibocxcom 小男孩日妈妈在线视频myoukucom 法国人与美女ppp 顶级人艺体图片 乡村淫妻 伊人综合伊人电影网 色妮咕 setudaquan 日本Av无吗亚州 对白自拍视频现 成人直播潘金莲 现代激情校园春色html 曾晓薇 ca0bi youjizzbotube 久草热久操福利视频 hh377wu2us 电影网站免费毛片 欧美性爱av豪车 www4性福 亚洲在线page 佐木明月香 巨乳专 我怀孕被人轮奸 玉足动漫排行版 亚洲最新在线视频视频色龙BT色龙在线色龙免费 大屁股女人欠干 亚洲色色www44pecom 哥哥妹妹淫荡射 公公和色儿媳妇小说 欧美性虐哥哥射 日日撸撸玛 日本wwwc成人网站 iuanlun 久色导航 BABEsOM成人内射免费Av 成人网天天干 wwwjizzuccom 欧美最新炮图 av天堂狠狠噜百度 长篇连载五月 14p撸哥 中国美女诱惑 免费看男人爱看的片 武侠古典爆乳精灵村 经典淫妻辽宁丹东 屁股软软AV 年轻母子乱淫 18内衣美女 淫水飞溅滨崎真绪 四房间婷婷五月丁香 a片毛片免费观看手机午 女人的阴性部有几种人体艺术 噢美性爱他三级片 成人裸女舞蹈视频 为什么我穿丝袜臀部会漏下来的 看了就想操的片子迅雷下载 亚洲色图迅雷下裁 中国人体艺术明星谁最好看 林心如乳交免费电影 圆圆的奶子影音先锋 最好看的俄罗斯a片 吸bb烟50p 女尿尿偷拍 奇米手机色播 风流皇帝张无忌全文 狼爱色网 美女性爱图未满成年免进 我爱干逼 幕春堂母子强奸小说 老外换妻 做爱裸体女人逼 欧美色老汉下载 wwwsnrenticom 韩国女做爱福利的网站 91肏屄视频 www五月天cmm 第五综合自拍偷拍 极品天堂网 欧美另类日韩 前男友杀死丈夫北京 www75744com 奇米噜噜噜在线视频 少女和少男做爱黄色网站 久久色欲 巨乳荡妇小说 成年动漫av nit少女 7758电影院下载 轮奸女人视频 成人在线视频综合站手机版 自拍女穴P 男人与狗兽交 日日夜夜鲁妈妈鲁播放小说 在线视频清纯唯美 少妇骚妇系列小说wwwlwxiaoshuocom feizhourentiyishu A片免费中文字幕动漫 重口味肛片 美女与动物交配成人综合 5x社区免费观看视频sqwww5xqq1com5xxx2comwww5xxx1comwww5xxx2com 超碰动漫www 成人Av勉费电影视频wwwyehaobo7com 恋足视界 苍井空骑兵 按摩系列视频三级 强奸乱伦操你啦 性情 wwwwcon520XXid 激情都市操丈母娘 有个黄色网站后入式护士是谁 酒色乱伦 手机强暴视频网站 夜店sm 有没有关于av的贴吧 泷泽萝拉AV在线wwwlulukan1com 妈咪综合网 丝袜性感老师小说 美国性爱导航 超碰国产偷拍视频 丝交15p www917yscmo 午夜剧场免费韩国电影 性福TV国产 aav去吧 国外母子视频网址 唐山师范学院官网 狠狠爱狠狠干明星 苍井空av有没有无码片 18岁姑娘自拍 淫荡母子AV 世界上潮吹 亲亲热com 日本最大胆照片体图 天天激情mediaweibocn 无码亚洲在线下载 啪啪色资源站 淫骚录音 偷拍美女上女侧 射姐姐手机在线影院 日本萝莉av小视频在线 偷拍自拍做爱小说 俺去也anquyecom 撸操逼网啊 梅花计划床吻戏 123bbbb wwwwwwcaocom 美女脱粪视频 haoleavcomwww 五月婷婷六月丁香-百度 久久萝莉视频 嫩妹子wwwlutubacc 久久爱人马交 少妇被抽插内射14p 亚州av鸟 www3a3acom 开心撸射 国产黄色小说有哪些 WWW88lsnCOm 东北xx成人网 母子乱伦~38岁漂亮熟女 www1100luscon 062bcomwap231dycom 五月天色色色色色色色色色色色色色 撸撸管狠狠爱在线 大宝剑电影院网址 WWWAV7S 黑人成人a片视频 毛片基地之怡红院 淫荡蹂躏动态图 波多野结衣性感美图 9日日夜夜撸在线影院l 三级电影借种 自拍偷拍西瓜播放 少妇自拍网 啪啪视频高清视频在线观看大全1000 为成年少女性爱下载 上海厕所偷拍视频在线 精品自拍美女 欧美阿ⅴ在线视频 色猫444 骚妇丝足 李宗盛三级片 青青草色币色和尚 少妇极品乱伦 成人电影_偷拍自拍_亚洲图片_欧美图片_成人在线电影WWWAVAV91 福利视频自拍 chinesepornvideos--porn300 手机毛片太太影院 AV插妹妹在线电影啪啪啪 青青草视频视论坛首页 lululuAV 荷包网123app下载 琪琪影院高级下载 涩妹妹在线av 银虎聚色导航 东京热MV 我想找个小妹妹 青青草光棍免费视频 欧美口交乱图片 先锋资源淫荡女自慰 婷婷五月花亚洲色图 开心春色 5151jj 免费avzx 亚州色图日韩插插视频 古典武侠情欲小说 好吊日53scncom 欧美幼幼A片 苍老师BB UU帝国 激情桃园春色 6080激情影院 清纯唯美乱伦图 丰腴白皙人妻 ‖www1111kpcom 米奇色第四色 天天撸一撸图 免费黄色无码视频 影视软件论坛 爱上丝袜美少女 www玩捧Tv 麻生希人妻 人人日人人摸人人添 台湾经典三级在线观看 carpon群交 野花鲁最近30部 成人伊人开心网 媚药教师在线播放 日本av无码在线播放 熟人妻网 成人涩涩影院的视频 日本无码福利电影在线 浴室中的苍井空 AV黄色片下载 草狗 大香焦网66y7com免费 蜜桃成熟时完整版2005 成人速播视频 怎样看免费的AV 5XX 456jjj 性感美人妻电影 护士熟母wwwmcc676com fupapacn 日本少女性交漫画 男sm视频在线观看 超碰免费公开视频国语 色乌龟综合网苍井空 久久精品视频在线看99苍井空 1314heicim 亚洲性爱欧美性爱偷拍自拍 变态另类淫淫网 国外人体艺术摄影 666xxxbcom 色色色色色小说激情 69黑几把 ttjh113dddcom www2222xecomvodlist566html 男为女口交图片培训 pornhub熟女 你懂的资源网最新地址 22cccom 91超碰视频在线观看 97炮app 成人动画网www42nscom haole56789 a片丝袜那有a片看a片东京热a片q钬 chaopengwww 爱上姐姐操逼 国外幼幼在线观看网址 亚洲大胆套图 嘿咻影院美女和男人啪啪视频 m手机在线观看色色 亚洲色图欧洲色图偷拍自拍另类色图在线 手机在线的h观看网址 五月天亚洲 零点影院 家有淫乱色网 啪啪网夜夜在线影院 19撸管网 wap9999akcom qq邮箱163com 泰国人妖免费中文群交性爱视频播放视频播放 有h的少女小说 暴插大奶少妇 990ee 我和大嫂16P 美女基情四月 东方avav电网 av904comwap 美女天天好逼网 超碰在线乱伦爱爱小说 sm系列国产系列偷拍自拍在线视频 人妻的b真嫩 国产网红av 先锋2018资源 顶级夫妻爽图 老婆自拍中文字幕 新新影院若怒 男女互甜屄的视频 色欲影视10000 射脸上在线 大屁股阿姨作者不详 先锋资源比特 青苹果影院噜噜妈妈 蚂蚁小说网美女图 撸撸干先锋 acaaacccxom HAOXAVCOMmagnet 我爱丰满中年女人日皮性交怎么办 姐姐骚av手机在线 日本男人玩中国女人 www艹表姐 黄色av动漫下载 丁香五月婷婷人与兽 天海翼巨乳色图 岛国熟女撸撸色 爱色网成人片www789lllcom 台弯妹中文娱乐网 亚洲饥渴15P 外国少女口交大吊黑 套图综合下一页 波多野结衣床上被操 569BB 77嘿最新地 欧美性交成人网站 色七七色小姐 国模杨依在线 af990com 3D性色网 wwwbt3456Commp4 舔老女人穴电影 好色大姨姐 HHH57COM 大黑bi bbb811在线 同学精液 大鸡吧老公操动态图片 啪啪啪色图 欧美性爱经典强奸乱伦 资源吧强奸小说 caoliushequrg 女儿的好紧好爽 WWWBB251con 成人激情偸怕 强奸少女a片 美女欧美大胆人体裸体艺术下体 23个姿势真人动态图 WWW_FAMITSU_COM 美女激情裸聊自拍 丝袜美腿番号封面 做爱hai小说 抽插黄美姬 日本韩国丝袜电影 ribenavnvyou 香港黄性大全图片 mm72con 插死她电影网快播 青毛极品画眉鸟图片 欧美金发骚女情趣内衣人体 大胆成人艺术图片 147人体性艺术 妻陥落同人作品官网 屄 插 官场淫荡母女同夫 后庭式插入少妇屄 狠狠干2015 夜夜肏小说图片 三峰麓香 小伙子与少妇3p 美女if男人真实操逼图 家庭乱伦之照片 小哲玛丽压结衣 偷拍自拍插老b 撸逼色 韩国女主播朴妮唛20 caopiwangzhan 嫂子 阴唇 操老汉影视 深深插妹妹花心 怎么下载黄色种子 老农和几个大学色女生的淫荡生活 人人色色资源站 欧美与姐姐性爱 日本性交小电影 经典无码清纯美女珍藏影片 五月天母与子乱伦小说 大肉棒猛干爆乳美女 吴亚磬裸体照 美幼艺术 妻子后妈媳妇日文漫画 最让人射的写真 国模汤加丽私拍 大胆 人体写 胖女人maopian 东京美女缓交图 少女的性交视频 李宗瑞种子资源百度云 清晰韩国性爱图15p 世界最大胆的人体艺术漏阴 狠狠色欧美色图 找少女顶级阴道相片 偷拍自拍女厕 日本种子资源 色美女自拍偷拍 偷拍自拍 10p 外国大香蕉 日本av女优成人qvad 韩国丝袜美女在家和男友大胆露穴美腿口活自拍视频 性门照 性一夜成人社区 123美女se图 迅雷种子性戏王 黑人在家做爱视频 台弯黄色a级片 成熟女人裸体正面照片 黄色穿越小说 147ee c0m 肥佬影音成人 好看 成人视频 欧日人体下阴穴裸体真人图片展 WWW_HHHX_COM 性交巨乳 wwwenenlu69com 爱逼熟女 夫妻zi拍在线看 男女打洞百度图片 女丽网小说 酒色视频网最新网址 漂亮妈妈被我操 肏屄的小故事 国模幼幼 22人体艺术美女 美女下体图片大全无遮挡 久久热在线视频李宗瑞 制服空姐集体大乱交 操逼姿势大片 熟女做爱偷拍自拍快播56 女明星正在被肏 加藤鹰潮吹教学 艹11岁嫩逼 女嫩逼 你们操逼喜欢摸奶吗操操 我和爸爸的激情乱伦 在床上猛干妈妈 欧美乱妇大奶图片 偷拍黑丝女秘书 成人装逼故事 黑人长吊大干 韩国色资源 肏骚屄在线视频 亚洲tpzp 潇湘 star395 学习时报 psp怎么刷机 碧波仙子全集 伊丽莎白肖特 梦幻化生寺加点 wherewereyou 香奈儿no5 周杰伦雪碧 梦幻西游69群p 杀美女吃人肉小说 调教小姨妈游戏 韩国人体艺术组图 玛雅magnet 来插我吧小说 优库怎么看a片 人体做爱写真 快活谷论坛在线电影小店找俩小姐不够再来一个 小说区淫妻交换小说史 11影院回家的欲望 大操苍井空动态组图 萝莉日本幼女性交 妈妈被撸图片 最新人强奸与动物的案例 夫妻自拍打手枪 qvodqvod吴清雅 wwyoujizz日本 苍井空粉红亚洲 夏娃色网 求色老妈导航 欧美人与兽杂交变态 午夜影院免费观看 黄色图片和a片 与姐乱伦 妹妹的大骚屄 大胆裸模露bb 板口美惠乃在线观看 性吧第四色乱伦 美女露乳色图 色五色播网 欧美无码拳交 美国少妇黑色丝袜 母孑乱伦在线 亚洲色片va一天堂网 t56人体艺术大胆人体模特 夜夜快波大咪咪 美女馒头照视频 深田恭子下海了没有 波多野结衣av作品图蜜桃网 爱上色 明星做爱thunderftp 阴道是屄吗 如厕视频 WWWWW26UUUCOM 长坂本真绫 WWWG5S2COM 天噜啦影院 处女阴沟无毛图片 不同年龄女性生值器图 茂如森林的阴毛图 mac版淫色网站 搞色av 美女huang 色嘻嘻网址 巨乳无码xfplay 先锋片 亚洲色色图色色哥 hi一sexnet 黑人大阴富 我爱看片免装版 色天使影音在导航 偷拍自拍人体网 操少妇的逼短片 女人裸体撸一撸摄影专咠 我要看美女性交片 嫩滑女 影音先锋手机资源大全 成濑里纱第七部 苍井空近况 西西人体艺术张雨 工作时间干炮吃了职业生涯的影音先锋 古武操逼小说 WWW5678LUCOM 寻找日本乱伦家庭黄色小说 激情乱伦系列图片 女同av亚洲 在线观看色色影院无需播放器 森迫永依成年照片 4seh5 操色论坛 tpimage久草 WWW679BOCOM 老人强奸少女小说 幼幼性爱美图 抽插小穴水多 12345678性爱 口交口爆性爱 先锋影音美女 黄色老人性爱小说 日本城人电 五月激情电影百度影音 骚妹声吧 大鸡吧草草草 吃玉足小说 谁那有与youjizz差不多的网站 xingjiaoen 三级色黄色片图片 美女漏屄秀场 最猛成人真人口交网站 蒋文文renti 丫丫4480新影院 蒙古女人的性欲故事 撸撸b图 我选择了慕色天使 私色房奇米网 做爱玩15p 草榴社区迷奸 人妻被公公操的动漫 操你综合图片 哥哥影视撸啊撸 有声乱伦小说下载收听 噜噜色影院噜噜色电影色噜噜影视噜噜色网 哥哥操网正在播放双拳交女朋友如何自慰 vA成人教育 车上操嫂嫂五月天 翔田千里泳装 粉嫩小逼的美女图片 狼百度人体图片 偷窥女教师网站 美女与野兽性爱成人电影 狠狠撸AV集团 妻子出台 wwwhuangsecome 红怡院www 久草在线资草免 yy骚女直播 兽幼怀孕 www路02kkkcom v片资源吧首页百度 酒店爆操背着老公偷情的漂亮少妇 jizxsex sm性调教百度影音 新东方av在线成人 插国产小护士b 干老老人丝袜高跟鞋 香港母乳三级 寂寞草在线视频色亚洲 偷看女老师嘘嘘色色 天上人间美女做爱的图片 收一个三级带 女人黑逼流水大鸡巴图片乱伦小说 女男做爱激情 肏妹玩肏我呀 26uuu综合插吧网 俄罗斯每少女鲍15p 国产免插 怏播色色色 撸李哥 裸体漏阴茎阴道性交流k精 av12av日本在线观看512qucom 哥哥干16p图片 以色列XXX百度 色女熟女人妻 奇米第四色春大香蕉 最新日本母子乱伦手机在线网站 美女俄罗妈妈女主 台湾呦呦中文网娱乐网 亚洲成人网站图片变态性爱 九九色视瓶在线播放 黄色片wwwybg3com黄色片一级 黄色电影av片不用放大器免费看 欧美巨阴av下载 近亲亚洲图 日本淫色magnet VS色色国王 www215妹com 迷j系 3d动画乱伦 wwwsaolaomeicom 五月天瑟 女同性恋干逼 另类少妇AV 乱伦性爱舔逼 各种漂亮的美屄摄影展示 抽插做爱视频一级日妣图 自摸粉出水 大鸡吧操大阴唇 我的女朋友叫我搞她妈妈 黄色图片合成软件 找个小姐后插进去的真人版 王老鲁26uuu 笨郎出品经典好图 邪恶集网站 黑斯袜少妇 爆射阴部高跟鞋hhh 怡红院日韩av欧美av国产av7月 美女少妇自慰舌舔自慰 av成人影视wwwaavv5com 美女掰小穴 丈母娘喜欢我操她视屏 sedoudouzonghewang 艳照门照片漏b照片 春色图宫 知春色 春色文学 樱井莉亚电影美愚 樱井莉亚经典片儿 樱井莉亚认识 樱井莉亚像张韶涵 小泽玛利亚迅雷 有没有无毒h网 h网介绍 www酷狗音乐com 开心五月天之小说 东京热n339 五月婷婷 酒色网 爱人看黄片 国足看黄片 谁有黄色小说的网站 黄色小说之校园春色 有没有什么黄色小说 h网站 吉川爱美 色哥乐园 天然素人 人群兽交网 三级电影网 色你妹综合 少妇集中营 性爱成人网 性淫淫影院 淫淫乐色网 艾奇成人社区 女人色站导航 女人舒服阴茎 最大的成人网 御の二代目谁有E谁有G 夜夜日 色久久 夜必撸 撸飘飘 逍遥阁 av撸色 就要搞 狠很橹影院 色博士导航网址看片 3344wv亚洲 成人 空姐 人人热人人爱 千人斩的电影天堂 青青草原bt资源网 黄页爱情电影 色碰碰资源网 5xxpp jiujiuse789 谷露影院美腿丝袜 大乱交在家 930伦理 激情内射网站 皇家Lu23 男人天堂2018亚洲男人天堂大香蕉 国际黄色影片 插爆我 真爽 嗯嗯骚货 PTS-298 丸ノ内OL专业按摩治疗院 23 香港电影暴力 av下载 美女夜夜日天天插 69bbb sw-167 天天拍天天鲁寡妇 午夜肏屄片 VTT644 拳交的美女裸体视频 强奸之夜视屏 热门明星合成视频 青青青手机版福利自拍视频在线观看 青青国产视频偷拍土豪酒店 强烈主播小妖深夜福利秀 影音先锋 成人 大众 日韩欧美天码在/线播放 在线a视频影音先锋 又色又黄爽片 日本十八禁啪啦啪视频 日后庭菊花视频在线播放 淫色书籍 日日久久福利影院破处 又黄又色添鸡把 玉房秘诀 百度云 日本女优跟狗 ftp 狗爷小县城城中村正在播放 拉丁美洲配人视频播放 正在播放极品美少女 WWW、fe553、COm pan baidu 福利 国产视频福利 爱色影2017视频播放 南宁护士门链接 视频 2018圣爱天堂网 一本道东京热大香蕉aⅴ Av资源综合网 俺什么www 神马电影dy888午夜4k4k bree xart 在线 1024手机看片 卡莉的一天 香蕉liveios网址 av10665 :狼人干综合大香蕉无码aV 俺去也成人小说网站 男女怕怕(漫画) 水嶋あずみ白丝 性爱人人操 十度福利影院 1亚欧成人小视频 今永纱奈下载链接 218国产免费自拍 美女图片视频mmtv 洋米糕在线久久 国产自拍大学生 开房 国产强奸自拍视频 李宗瑞迷奸视 频 午夜福利 穿着丝袜被操 第一福利网址导舰视频 偷拍美女丝袜 日本成人色色高清视频 亚洲图片 欧美图片日本 岛国在线无码免费视频 萌妹吧福利第1页 g0g0图片大全 迅雷高清无码种子 韩国丝袜 色戒未删版三邦车视频 动画伦理福利 天津备皮真人视频 凑点伦理电影网站 自拍偷拍bd播放 hdfucktv 优酷成人网 老女人淫秽物品 正在播放欧美私人影院 日逼视频17s 欲望之屋2 magnet 福利大鸡吧 3080avcom 久久毛片美国a影院 5侧所性视频 日本萝莉av女优 一本道色老天堂 抖音茶茶轩轩骗小学生钱吗? 日本xoxoxo无码 美女XXOO福利 maxi 247 hime 最新黄色网址 亚洲视频欧美视频在线视频 全国最色床戏 有声小说床戏比较多的 在线kedou 广州伧理片 动漫情侣上床视频 人人操 视频 SANJIQIAN 蓝尺润电影 苍井空女教师云播 ZEX-201磁力猫 人妻av在线看 亚洲综合成人社区网 狠狠啪综合 488成年网站 桃谷2018在线观看 6o8O第九影院 magnet 激情美女中出图片 成人无码免费播放 ed2k jizzzzzjav AV小黄网站 啄木鸟成人 mp4 a牛影院 被窝电影网wwwgaoavcc 一色屋色色资源站 世界十大禁片 ftp 紫竹铃取汁 ftp av中文字莫 噜噜色国产 ppv视频金瓶梅 磁力SSNI-407链 下载 日韩色导航 粉鲍鱼168视频 处女肏屄视频 达达色视频在线 XⅩX成人色片 呆哥爆操北京极品小悠继续演乱伦趴窗操女儿并约好操她妹 24:53 跟哥哥和骚表妹在 福利luoli视频 福利在线你懂得2015 疯骚少妇趴床上撅起蜜臀 大黑鸡巴肏熟女屄视频 岛国禁片在线播放 yin乱大巴a在线播放 饭冈加奈子 丁丁影视 俄罗斯美女内射视频 超碰在线播放 玩弄巨乳女邻居在线 强插床震叫床视频 教师无码磁力迅雷下载 米奇福利影院 超碰国产网友自拍视频 985hh 2018年手机福利自拍小视频 安装操逼小姐视频 神马午夜伦理福利51x 国产靠国产精品万人靠 成人福利视频手机在线 勾引摩的司机打野战 西瓜影音 手机福利视频玉兰站 激色猫欧美系列大香蕉 啪啪男人夜间小视频 日本高清无马一本道av 女人乱欲视频播放 做爱性交网 淫色天王 暮光之城1免费版视频pp 亚洲AV资源 偷窥自拍 清纯唯美 欧美 微咪xxxav 小电影在线成人 韩国娱乐圈悲惨全集39手机在线 成年漫画嗨网站 春色唐朝网页 夫妻人人草 日韩亚洲主播在线 茉哥影视 ftp 情侣怕怕怕视频免费正片 92看看电影院1000 摸毛片子 伦理无码在线福利在线播放 iuaniuen视频 韩国a片免费线上看 lu18小视频 玖玖黄色 小少妇被我操真人视频 zipai国模 骚屌操视频 仓多真绪爆乳女教师 超级AV在线 好XXOO在线视频 黑色男女福利 5性视频在线观看 叔狼影视 能看的免费一本道视频 小向美奈子AV在线看 女同按摩 国语对白迅雷链接 超碰人妻视频在线视频 神马电影天堂s杨 水嶋あずみ在线av 三亚午夜网址 欧美tv色无极在线影院 caoporon永久发布页 无码流出 簊田优 完全流出 色大姐青青草原综合网 4438x视频最新免费 守望先锋AV动漫版 影音先锋 青青草b网站 4438com 先锋影音在线视频 嫂子内射 jvid免费视频 正在播放 素股摩擦挑战 蓬莱仙山美女福利视频 操乱b 草他妈比视频 巨乳精油按摩在线 ssee日本在线视频 不知火舞动漫视频网站 宅男影院zn37 黄瓜资源 84pao强力 69iiu 国内最大在线自拍 女儿的朋友3 414影院 ae86老司机在线 成人文学视频 张丽黑鬼在线视频 在线av丝袜美腿视频 长春男人的舌头舔女人阴道的动作视频 台湾女优番号 人妻的诱惑磁力 下载 A级黄片视频 女郎狂濡 番号 菊丽莎百度云 潮吹迅雷磁力链接 色戒2小时38分在线观看gogo 破处mp4 下载 日本熟妇色五十路免费视频 欧美成人骑兵影院 3D精油按摩中文字幕电影 任任你操任你日 4鸭子av 色无极亚洲东京 人人费人人妻 秋霞66在线播放 唐朝丅V 大香蕉巨人免费观看 碰人人爽一本道 清宫性史5手魂影院 葵司在线观看无播放器 水岛津实 高潮 棚户区卖暗视频 播放 色娱乐 酒店卫生间操女朋友 潍坊陈倩倩视频在哪看 色狐吧 CDTS 8x8x强奸 日本重口网站在线 日本老影院 雪姑七友成大人版在线 小骚货中文视频 性爱骚逼 小妖精考试不及格性贿赂老师在线 小野寺梨纱无码 magnet 人人橾起碰免费视频69 成人性大香蕉伊人视频 陌上花av资源 狂操空姐嫩比网 mmfuli 白毛衣电影高清在线播放 幼女吞精图片 WWW5500PPCOM www 黄大片日本阿v片在线播放免费 鸡巴硬插视频 影音先锋秒拍福利 成人性感动漫xxx 国外小黄片在线播放 黑大屁股男女性交视频 邪恶道 acg漫画大全漫画皇室 福利视频369导航 pr社区玩具福利 乱伦视频大全 福利屋在线影院 94福利社区会员 一级黄色录像夫妻性生活影片播放 91av视频在线播放 青娱乐全国楼凤验证 国产 大胸 在线 仔仔网福利视频在线观看 人体44444444 色戒 搜一搜 偷窥盜摄在线播放 国产户外露出在线观看 aaa催女郎福利 天堂鲁丝袜 综合网人 超碰920在线 2018AV淘宝在线 wapAV 东京强制系列免费观看 婷婷五 西瓜影音 亚洲最大成人色爱网站 av月亮 金艺贞百度网盘 北纪麻妃无码高清电影 播放器大全女女女女女 国产在线精品视频播放 肏师娘 操逼无码小视频 韩国成人主播 双飞 北京麻妃在线影视 波多野结衣 带狗脖套 北田优步GIGA 国产自拍偷拍下载 国语对白磁力链接 操少妇人妻视频插播 成人AV先锋资源网 日韩伦理 ftp wwwcao 热热av 电影天堂黄片 亚洲电影第32页先锋 TPPN-062汗尻鈴原エミリ 今永美久磁力链 宅男影院91 boafdoa黑人肛交毛片 午夜视频怡红院 艳婚野史观看 天天插天天添天天秀 杭州废继AV片下载 为救人被迫献身的视频 91另类视频 wwwx鈺硏69 亚洲第一狼人天堂网 五月婷婷资源站 sss日本xxx snis123百度云 草露脸白皙女神说做爱不舒服我把她弄疼了国语对白 超碰巨乳女友浴室洗澡 超碰自插自拍 twyav ppyy永久 videostv中国sexovideo幼女 操96大学生视频露脸 TW18mm 人妖另类gif动态图 h版欧美伦理在线播放 曰日干夜夜插 37caocaobb 北岛玲直播视频 超碰视频资源免费高清人妻 超碰风骚视屏 黄色做爱视频免费观看 超碰视频伦理三级 五五热在线视频 电影影音先峰男人站 国产Av自拍 20l8亚洲男人天堂在线 先锋影院色播无码 饭粒网 剧情图解 日本毛片高清免费视频回曰本 快播还能用吗6 无码在 老鸭网盘 自慰百度云 古图解墓丽影h版神马电影 李毅吧在线电影深夜福利 琪琪影院色啪啪 mp4 和老师啪啪啪视频 草泥马视频 magnet 福利视频全裸直播 日本www152 性交视频APP下载 美女操最裸黄播平台 午夜福利日本空姐飞机做爰视频 av黄片免费网站 国产福利在线观看网站 免费欧美三级 高难度软体无码av 性福谈 午夜老司机美日视频 国内自拍老司机福利视频 成人午夜高清 一道本东无码免费手机直接看 嘿嘿嘿迅雷 超频在线香蕉伊人 操美女喷水福利视频 波多野结衣末剪版在线观看 还看成人免费视频 爆乳美女主动让帅哥摸故事 爆乳自拍偷拍 韩国女主播在线观看87 韩国女主播福利第二期 国产色 比佐沙罗 国产在线afv 无码 BT 乳交 种子 久久爱免费福利在线 黑丝av女忧在线视频 免费天海翼视频在线观看 丝溜溜小视频6080 1024福利视频啪啪啪 操熟女逼视频 新奴隶岛20番号 女王调教sm视频全集 电影天堂利欧路 喝下春药女学生被强奸先锋电影 嗯嗯 流氓 影院 咪咪乱伦大片 韩国pvi视屏 青青草国产自拍偷拍在线视频 阿v在线免賛 美女浴足综合网·c0m 大屁股少妇电影 自拍偷拍一本道在线播放 欧美滴色色 鲁鲁鸟av,390,ss,com av高清无码磁力链 bt种子 神马午l夜福利51 91自拍 周琳琳下载 宇都宫紫苑 红秀 午夜影院男女激情 偷窥438日本 邪恶后入式动态图 亚洲日韩色在线高清 日韩女忧 国内自拍 欧美激情 卡通动漫 强奸乱伦 在线播放 巨乳在线AV视频网 国产av一级 狠狠摞网友自拍 GVG-225 青青草i在线视频 renrenganshipin 伊人久久五十路 卵蛋动态zdface 乱伦彪 涉黄视频免费在线播放 射插插插免费视频 美国十次大公鸡 美女 亚洲 无套 全身体罗同性恋视频 青苹果视频分类精品免费 强奸皮裤丝袜诱惑视频 簧銫片kk449_com 人妻野外大胆自拍福利 人人色啪啪视频 极度变态Sm调教女性奴磁力链接 magnet 今永纱奈 网盘 金瓶梅在线第五季 朴诗妍百度云 a片资源吧6岁 老熟女碰碰视频在线观看 麻美由真 恶父 宋飞和表嫂 我要涩涩 神马手机91zizi在线观 大香蕉在线观看119 秋弄韩 av福利资源 182tv-人人草-大香蕉-av淘宝av在线av福利av网站-搜索页 日本大鸡巴插进去图视频 伦理片自拍国产 唐山葬本子 幼女福利视频 干完下铺草上铺在线完整 69p69骑虎精品 福利视频0885 手机看片福利永久国产 蓝奏云最新资源福利 mobilevio 秦先生女神琪琪在线观看 钟真最浪三级 阿v在线堂网老司机 丝瓜影视 小萝莉导航 很漂亮的美女口爆吞精视频 黄色美女操逼视频 狐狸视频下下载 欧美人与动物?交 荷兰丰满美女操b视频 很色的床上视频。 丝袜大胸美女自摸视频 最新番号 在线观看 AV在线视频天天看 757视频福利28集 国产尿尿手机观看 5手机在线福利 日本偷窥女性上厕所的视频黄 成人区色福利小视频 口活最好的番号排名 先锋俺射了 肛虐泥鳅在线看 大白兔在线视频 xinxin保坂 sanbangceshi 现在日照站街女 日本乱伦动漫 我的魅惑小娘姨子在线观看 自拍阴唇图片博彩 色欲亚洲在线 91 在线 桃谷绘里香 日本一本道官方网 最新欧美影院青青草 - 百度 美固一级片 ftp 欧美AV先锋影音xfyy 任你爽偷偷操 菲菲影视城中学生西瓜影音 男人av 织田真子tv 97夏同学改成什么了 361dy 欧美 亚洲美洲国产综合 五月丁香六月婷婷小说综合 爱上影院宅宅网 宅男影视第一页 www52jbcon 真人超大但在线视频 无码视频爱爱 韩国男女日币免费视频 内藤幸恵 国内真实偷拍 手机在线 国产自拍 日本有码 91 国语免费怡红院av 搜一部男女性交时全裸的视频看得一清二白和声音 日韩一级毛片大战 国产 丝袜 足交 伦理捆绑电景”, 淫小奴分享 日本熟女大白屁股 裸体抽插频频 fei插入式性交 透大屄 逼逼痒视频 动态做爱LOⅤE 黄色3d 肉体视频 找操屄视频 4388x全国人情免费网 日本动漫三级片 mp4 一本道官网原20岁在线播放 757深夜福视频在线观看 韩主播 M3U8 丝袜五分裤视频 伦理片草巴 微拍福利伦理片 国产自拍3p在线观 韩国三人以上性肛交视频播放 4438成人黄色视频 touch 女同 色色酒吧影院1 www,avtb008,ocm 水萝拉欲望保姆 电影唾液濃厚接吻在线观看 色五月天 婷婷 GVG-541 thunder 国语对白在线免费视频 马凡舒泳裤掉落视频2011 虎牙高管潜规则视频 狼窝影院32853 日子献精无码视频 苦力怕娘的污污视频 男人和美女人操逼 美女乳头高清图 西班牙成人色导航 承认美女图片 zhonghuaqingsewang 外国美女性感穴图 肏小屄图 小穴小穴内射6 此女子好娇嫩啊真想推到就肉p 老妇操小伙 亚洲色图偷偷撸小说 meilijianchengrenwang 日本性女学家人体模型 第四成人网白白发布 丝袜人体艺术鍒犻櫎 美国胖子性交 透明艺术操逼 WWW_YINBIAV_COM sv人体艺术 狂操美女0814熟女乱伦 qingsezipaitoupai 361美女人体 妈咪和子干逼 叔母小穴 亚洲操逼图片小说区 luanluncaobixiaoshuo 江苏徐州13岁学生美眉qq号 1级爿快播 www色美眉com 各种犬的性能力 肏艺术 女人与交狗视频 放荡少妇影片 huangse电影在线观看 我的动物情人狗与马 学妹淫色 国外好网站 爱色电影网图片 狠狠干丰满女儿 淫荡的叫床声下载 0女性裸体艺术图