"use strict";(self.webpackChunkdoris_website=self.webpackChunkdoris_website||[]).push([[65379],{15680:(e,r,t)=>{t.d(r,{xA:()=>p,yg:()=>d});var n=t(296540);function a(e,r,t){return r in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function o(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r&&(n=n.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),t.push.apply(t,n)}return t}function l(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{};r%2?o(Object(t),!0).forEach((function(r){a(e,r,t[r])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):o(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))}))}return e}function c(e,r){if(null==e)return{};var t,n,a=function(e,r){if(null==e)return{};var t,n,a={},o=Object.keys(e);for(n=0;n<o.length;n++)t=o[n],r.indexOf(t)>=0||(a[t]=e[t]);return a}(e,r);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n<o.length;n++)t=o[n],r.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(a[t]=e[t])}return a}var i=n.createContext({}),s=function(e){var r=n.useContext(i),t=r;return e&&(t="function"==typeof e?e(r):l(l({},r),e)),t},p=function(e){var r=s(e.components);return n.createElement(i.Provider,{value:r},e.children)},u="mdxType",y={inlineCode:"code",wrapper:function(e){var r=e.children;return n.createElement(n.Fragment,{},r)}},f=n.forwardRef((function(e,r){var t=e.components,a=e.mdxType,o=e.originalType,i=e.parentName,p=c(e,["components","mdxType","originalType","parentName"]),u=s(t),f=a,d=u["".concat(i,".").concat(f)]||u[f]||y[f]||o;return t?n.createElement(d,l(l({ref:r},p),{},{components:t})):n.createElement(d,l({ref:r},p))}));function d(e,r){var t=arguments,a=r&&r.mdxType;if("string"==typeof e||a){var o=t.length,l=new Array(o);l[0]=f;var c={};for(var i in r)hasOwnProperty.call(r,i)&&(c[i]=r[i]);c.originalType=e,c[u]="string"==typeof e?e:a,l[1]=c;for(var s=2;s<o;s++)l[s]=t[s];return n.createElement.apply(null,l)}return n.createElement.apply(null,t)}f.displayName="MDXCreateElement"},137447:(e,r,t)=>{t.r(r),t.d(r,{assets:()=>i,contentTitle:()=>l,default:()=>y,frontMatter:()=>o,metadata:()=>c,toc:()=>s});var n=t(58168),a=(t(296540),t(15680));const o={title:"CHAR",language:"zh-CN"},l=void 0,c={unversionedId:"sql-manual/sql-reference/Data-Types/CHAR",id:"version-2.0/sql-manual/sql-reference/Data-Types/CHAR",title:"CHAR",description:"\x3c!--",source:"@site/i18n/zh-CN/docusaurus-plugin-content-docs/version-2.0/sql-manual/sql-reference/Data-Types/CHAR.md",sourceDirName:"sql-manual/sql-reference/Data-Types",slug:"/sql-manual/sql-reference/Data-Types/CHAR",permalink:"/zh-CN/docs/2.0/sql-manual/sql-reference/Data-Types/CHAR",draft:!1,tags:[],version:"2.0",frontMatter:{title:"CHAR",language:"zh-CN"},sidebar:"docs",previous:{title:"DATETIME",permalink:"/zh-CN/docs/2.0/sql-manual/sql-reference/Data-Types/DATETIME"},next:{title:"VARCHAR",permalink:"/zh-CN/docs/2.0/sql-manual/sql-reference/Data-Types/VARCHAR"}},i={},s=[{value:"CHAR",id:"char",level:2},{value:"description",id:"description",level:3},{value:"keywords",id:"keywords",level:3}],p={toc:s},u="wrapper";function y(e){let{components:r,...t}=e;return(0,a.yg)(u,(0,n.A)({},p,t,{components:r,mdxType:"MDXLayout"}),(0,a.yg)("h2",{id:"char"},"CHAR"),(0,a.yg)("h3",{id:"description"},"description"),(0,a.yg)("pre",null,(0,a.yg)("code",{parentName:"pre"},"CHAR(M)\n\u5b9a\u957f\u5b57\u7b26\u4e32\uff0cM\u4ee3\u8868\u7684\u662f\u5b9a\u957f\u5b57\u7b26\u4e32\u7684\u5b57\u8282\u957f\u5ea6\u3002M\u7684\u8303\u56f4\u662f1-255\n")),(0,a.yg)("h3",{id:"keywords"},"keywords"),(0,a.yg)("pre",null,(0,a.yg)("code",{parentName:"pre"},"CHAR\n")))}y.isMDXComponent=!0}}]);